我正在玩jqGrid,我想知道jqGrid的colModel中jsonmap的值是否可以有过滤值。
ColModel
colModel:[
{name:'fname',index:'action',jsonmap:'cells.cell.colname["fname"].value', width:50, align:"center", resizable:false}
]
JSON
{
"rows":[
{
"cells":
{
"cell":{
"value":"Mark",
"colname": "fname"
}
}
}
]
}
JSON输入中“cells”属性的值为数组
{
"rows":[
{
"cells":[
{
"cell":{
"value":"Mark",
"colname": "fname"
}
}]
}
]
}
以下 colModel
不起作用
colModel:[
{name:'fname',index:'action',jsonmap:'cells.cell.value', width:50, align:"center", resizable:false}
]
要放置多个列以及为什么添加过滤器的建议 - 我在使用以下结构映射带有jsonmap
的json时出现问题。这就是为什么我问我们是否可以添加过滤器。
{
"rows":[
{
"cells":
{
"cell":{
"value":"Mark",
"colname": "fname"
},
"cell":{
"value":"Strong",
"colname": "lname"
},
"cell":{
"value":"Hourly",
"colname": "emptype"
}
}
}
]
}
更新:JSON数据可以是
{
"wrapper": {
"rows": [
{
"cells": [
{
"value": "Mark",
"colname": "fname"
},
{
"value": "Strong",
"colname": "lname"
},
{
"value": "Hourly",
"colname": "emptype"
}
]
},
{
"cells": [
{
"value": "Mark2",
"colname": "fname"
},
{
"value": "Strong2",
"colname": "lname"
},
{
"value": "Hourly2",
"colname": "emptype"
}
]
}
]
}
}
答案 0 :(得分:3)
您可以将jsonmap
用作功能
jsonmap: function (item) {
// item.cells.cell.colname is "fname"
return item.cells.cell.value;
}
还需要jqGrid的选项jsonReader: { repeatitems: false }
。
您可以阅读您发布的JSON输入(请参阅here),但我仍然不理解您的建议。为什么JSON输入中"cells"
属性的值是对象而不是数组?为什么需要财产"cells"
?您如何想象将更多列作为一列?通常,您会在jsonmap
函数中看到"rows"
数组中的整个项目,因此您可以实现从数据中读取字段的任何算法。
更新:我写了the next demo,它读取了您发布的最新版本的JSON数据。实现的想法保持不变 - 使用jsonmap
作为函数。
列模型可以是以下
colModel: [
{name: 'fname', jsonmap: function (obj) { return getVaueByName(obj.cells, "fname"); }},
{name: 'lname', jsonmap: function (obj) { return getVaueByName(obj.cells, "lname"); }},
{name: 'emptype', jsonmap: function (obj) { return getVaueByName(obj.cells, "emptype"); }}
],
cmTemplate: {width: 70, align: "center", resizable: false},
gridview: true,
height: 'auto',
jsonReader: {
root: "wrapper.rows",
page: function () { return 1; },
total: function () { return 1; },
repeatitems: false
}
将方法getVaueByName
定义为
var getVaueByName = function (cells, colName) {
var i, count = cells.length, item;
for (i = 0; i < count; i += 1) {
item = cells[i];
if (item.colname === colName) {
return item.value;
}
}
return '';
};