我正在玩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}
]
放置一个以上的列,为什么添加过滤器的建议 -我有一个问题映射json与jsonmap
与以下结构。这就是为什么我问我们是否可以添加一个过滤器。
{
"rows":[
{
"cells":
{
"cell":{
"value":"Mark",
"colname": "fname"
},
"cell":{
"value":"Strong",
"colname": "lname"
},
"cell":{
"value":"Hourly",
"colname": "emptype"
}
}
}
]
}
UPDATED: 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"
}
]
}
]
}
}
可以使用jsonmap
作为函数
jsonmap: function (item) {
// item.cells.cell.colname is "fname"
return item.cells.cell.value;
}
额外需要jqGrid的jsonReader: { repeatitems: false }
选项。
一个人可以阅读JSON输入你张贴(见这里),但我仍然不明白你的建议。为什么在JSON输入"cells"
属性的值是对象,而不是一个数组?为什么需要属性"cells"
?你怎么想象把更多的人放在一个栏里呢?一般来说,在jsonmap
函数中,您可以访问"rows"
数组中的整个项,因此您可以实现从数据中读取字段的任何算法。
UPDATED:我编写了下一个演示,它读取了您发布的最后一个版本的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 '';
};