jqGrid -是否可以在colModel中过滤jsonmap的值?



我正在玩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 '';
    };

最新更新