Сортировка или поиск jqGrid не работает со столбцами, имеющими обозначение json - PullRequest
1 голос
/ 09 января 2011

У меня есть эта jqGrid:

$("#report").jqGrid( {
        url:        '/py/db?coll=report',
        datatype:   'json',
        height:     250,
        colNames:   ['ACN', 'Status', 'Amount'],
        colModel:   [ {name:'acn', sortable:true},
                      {name:'meta.status', sortable:true},
                      {name:'amount'} ],
        caption: 'Show Report',
        rownumbers: true,
        gridview: true,
        rowNum: 10,
        rowList: [10,20,30],
        pager: '#report_pager',
        viewrecords: true,
        sortname: 'acn',
        sortorder: "desc",
        altRows: true,
        loadonce: true,
        mtype: "GET",
        rowTotal: 1000,
        jsonReader: {
            root: "rows",
            page: "page",
            total: "total",
            records: "records",
            repeatitems: false,
            id: "acn"
            }
     });

Обратите внимание, что столбец meta.status находится в точечной нотации JSON и, соответственно, данные, отправленные с сервера, выглядят так:

{"page": "1", "total": "1", "records": "5", "rows": [ 
        {"acn":1,"meta": {"status":"Confirmed"}, "amount": 50},
        {"acn":2,"meta": {"status":"Started"}, "amount": 51},
        {"acn":3,"meta": {"status":"Stopped"}, "amount": 52},
        {"acn":4,"meta": {"status":"Working"}, "amount": 53},
        {"acn":5,"meta": {"status":"Started"}, "amount": 54} ] }

Проблемы в два раза:

  • Сортировка не работает для столбцов с точечной нотацией, здесь "meta.status". Он даже не отображает сортируемые значки в заголовке столбца, и ничего не происходит, даже если щелкнуть заголовок. Сортировка не работает, независимо от того, является ли loadonce истинным или ложным.
  • Если я попытаюсь найти (после установки loadonce значение true) для столбца meta.status (другие столбцы без точечной нотации в порядке), то он выдаст ошибку javascript, подобную этой. alt text

Ответы [ 2 ]

3 голосов
/ 09 января 2011

После изменения определения последнего столбца с {name:amount} на {name:'amount'} я мог воспроизвести вашу проблему: сортировка по «Статусу» не работает, но я не смог увидеть ни одного сообщения об ошибке (см. демо)).

Можно решить проблему, изменив определение второго столбца с

{name:'meta.status', sortable:true}

на

{name:'status', sortable:true, jsonmap: "meta.status"}

См. Исправленную демонстрацию здесь .

1 голос
/ 09 августа 2011

Как правило, чтобы избежать этой проблемы:

  1. Убедитесь, что значения name и index совпадают

    name: 'Date', index: 'Date',
    name: 'Clicks', index: 'Clicks',
    ...
    
  2. Убедитесь, что вы установили что-то вроде

    $("#jqGrid").setGridParam({datatype: 'local'}); 
    

    И что, когда вы перезагружаете сетку - вы исправляете это как "JSON" при перезагрузке, если вы ее используете - т.е.

    $("#yourGridID").setGridParam({datatype: 'json'}).trigger("reloadGrid");
    
  3. Наконец, убедитесь, что вы используете

    name: 'Date', index: 'Date', sortable:true
    

    Где вам это нужно.

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