Настроить (Pivot) отображение Jqgrid с вложенным JSON-объектом - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть JSON

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

Вот мой colModel кода jqgrid на данный момент.

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(поскольку у меня нет контроля над объектом, я получаю его только через службу) ??

1 Ответ

1 голос
/ 10 апреля 2019

Лучше манипулировать jsonReader (который может быть функцией), чем изменять colModel.См. Документы Guriddo для подробного объяснения

Попробуйте ввести следующий код:

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 тип данных - jsonstring, ноэто так же, как JSON.Этот набор в основном предназначен для работы jsfiddle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...