jqGrid - можно ли отфильтровать значение jsonmap в colModel - PullRequest
0 голосов
/ 16 ноября 2011

Я играю с jqGrid и мне интересно, может ли значение jsonmap в colModel jqGrid иметь фильтрованное значение.

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 в виде массива

{   
    "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"
                }
            }
        }
   ]
}

ОБНОВЛЕНО : Данные 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 Ответ

3 голосов
/ 16 ноября 2011

Вы можете использовать jsonmap как функцию

jsonmap: function (item) {
    // item.cells.cell.colname is "fname"
    return item.cells.cell.value;
}

Дополнительно требуется опция jsonReader: { repeatitems: false } в jqGrid.

Можно прочитать введенный вами JSON-ввод (см. здесь ), но я все еще не понимаю вашего предложения.Почему значение свойства "cells" во входных данных JSON является объектом, а не массивом?Зачем вообще нужна собственность "cells"?Как вы представляете, чтобы разместить больше как один столбец на пути?В общем, вы видите, что в функции jsonmap у вас есть доступ ко всему элементу из массива "rows", поэтому вы можете реализовать любой алгоритм чтения полей из данных.

ОБНОВЛЕНО : я написал следующую демонстрацию , в которой читается последняя версия данных 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 '';
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...