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

时间:2011-11-15 22:44:31

标签: json jqgrid

我正在玩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"
                    }
                ]
            }
        ]
    }
}

1 个答案:

答案 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 '';
    };