使用嵌套JSON对象自定义(透视)Jqgrid的显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用嵌套JSON对象自定义(透视)Jqgrid的显示相关的知识,希望对你有一定的参考价值。

我有一个JSON

{"empId":"4444","skill":{"rating":"1","review":"Great"},"productivity":{"rating":"2","review":"Good"}};

这是我现在的jqgrid代码的colModel。

colModel: [
{name:'skill.rating',label:'Skill Rating', width:150,editable: true},
{name:'skill.review',label:'Skill Review', width:150,editable: true},
{name:'productivity.rating',label:'Productivity Rating',width:150,editable: true},
{name:'productivity.review',label:'Productivity Review', width:150,editable: true}]

这就是我的网格现在看起来像My JqGrid

但是这种网格设计使得未来扩展变得困难,如果有新类别可靠性评估和评级,则必须手动更改网格设计。

相反,我想让它在网格中以这种格式看

Category      ||  Rating   || Review
----------------------------------
Skill         ||  1        || Great
Productivity  ||  2        || Good
Reliability   ||  3        || Average

有没有办法用Jqgrid做到这一点,而不必更改JSON对象的结构(因为我无法控制对象,我只通过服务获取它)?

答案

最好操纵jsonReader(可以是一个函数)而不是更改colModel。有关详细说明,请参阅Guriddo docs

尝试使用以下代码:

colModel: [
    {name:'category',label:'Category', width:150,editable: true},
    {name:'rating',label:'Skill Rating', width:150,editable: true},
    {name:'review',label:'Skill Review', width:150,editable: true}
],
jsonReader : {
    root : function (data) {
        var ret  = [];
        for( var key in data) {
            if($.isPlainObject(data[key])) {
                var tmp = data[key];
                tmp.category = key;
                ret.push(tmp);
            }
        }
        return ret;
    }
},

UPDATE

工作代码下方

html

<table id="jqGrid"></table>
<div id="jqGridPager"></div>

javascript

var mydata ={"empId" : "4444", "skill" : "rating":"1", "review":"Great"}, "productivity" : {"rating":"2","review":"Good"}, "reliability" : {"rating":"3","review":"Very Good"}};


        $("#jqGrid").jqGrid({
            datastr : mydata,
            datatype: "jsonstring",
            colModel: [
                {name:'category',label:'Category', width:150,editable: true},
                {name:'rating',label:'Skill Rating', width:150,editable: true},
                {name:'review',label:'Skill Review', width:150,editable: true}
            ],
            jsonReader : {
                root : function (data) {
                    var ret  = [];
                    for( var key in data) {
                        if($.isPlainObject(data[key])) {
                            var tmp = data[key];
                            tmp.category = key;
                            ret.push(tmp);
                        }
                    }
                    return ret;
                }
            },
            viewrecords: true,
            width: 780,
            rowNum: 15,
            //cellEdit : true,
            rownumbers: true, // show row numbers
            rownumWidth: 25, // the width of the row numbers columns
            pager: "#jqGridPager"
        });

这里qazxsw poi数据类型的链接是json字符串,但它和json一样。这个集合主要供jsfiddle工作。

以上是关于使用嵌套JSON对象自定义(透视)Jqgrid的显示的主要内容,如果未能解决你的问题,请参考以下文章

jqgrid分页后,自定义查询数据怎么得到所有页的某列值的合计

自定义单选按钮jqgrid编辑表单

Ruby 中嵌套复杂对象的自定义 to_json

用于深层嵌套对象的自定义Json Serializer

jqGrid字符串自定义格式,如日期格式

无法在 asp.net mvc 4 中将 JSON 对象映射到 JqGrid