【问题标题】:Customise(Pivot) display of a Jqgrid with a Nested JSON object使用嵌套 JSON 对象自定义(枢轴)显示 Jqgrid
【发布时间】:2019-04-10 08:51:41
【问题描述】:

我有一个 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}]

这就是我的网格现在的样子

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

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

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

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

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    最好操作 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;
        }
    },
    

    更新

    工作代码下方

    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"
            });
    

    这里是jsfiddle example的链接 数据类型是 jsonstring,但它与 json 相同。这套主要是供jsfiddle工作的。

    【讨论】:

    • 它不起作用,我得到一个空网格。不过感谢您的建议。
    • 你的数据类型是 local 还是 json?在我们的最后,这工作正常。我会准备一个演示。顺便问一下,用的是哪个版本的jqGrid?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    相关资源
    最近更新 更多