jqGrid本地数据排序会丢失信息

jqGrid本地数据排序会丢失信息,jqgrid,jqgrid-formatter,Jqgrid,Jqgrid Formatter,好吧,我正准备把头发扯下来。我正在加载一个jqGrid,其中包含JSON数据,但“loadonce”设置为true,以保持其本地性。当我只显示列的默认内容时,排序工作正常,但我需要的是,一些列使用另一列的信息来修改显示的内容。例如,我想在一列下同时显示“设备”和“模型”,而不是“设备”列和“模型”列,就像这个“设备-模型”,我使用一个自定义的格式化程序 问题是,在这种情况下,当我进行排序时,我丢失了“模型”信息,它变得“未定义”。以下是我的部分代码: mdlTable = tableWrap.j

好吧,我正准备把头发扯下来。我正在加载一个jqGrid,其中包含JSON数据,但“loadonce”设置为true,以保持其本地性。当我只显示列的默认内容时,排序工作正常,但我需要的是,一些列使用另一列的信息来修改显示的内容。例如,我想在一列下同时显示“设备”和“模型”,而不是“设备”列和“模型”列,就像这个“设备-模型”,我使用一个自定义的格式化程序

问题是,在这种情况下,当我进行排序时,我丢失了“模型”信息,它变得“未定义”。以下是我的部分代码:

mdlTable = tableWrap.jqGrid({
    url: loadURL,
    datatype: 'json',
    colNames: ['ID', 'Device', 'Description', 'IP', 'Model'],
    colModel: [
        {name:'id', index:'id', hidden:true, key:true},
        {name:'device', index:'device', width:192,
            formatter:function(value, options, rData){
                var str = "<a href='/administration/mdl/vwDevice.aspx?device_id=";
                str += rData[0] + "' target='_blank'>" + value;
                if ('' != rData[4]) str += " - " + rData[4];
                str += "</a>";
                return str;
            }
        },
        {name:'desc', index:'desc', width:256, sortable:false},
        {name:'ip', index:'ip', width:96},
        {name:'model', index:'model', hidden:true}
    ],
    sortname: 'id',
    viewrecords: true,
    loadonce: true,
    viewsortcols: [true,'vertical',true],
    gridview: true,
    ignoreCase: true
})
.navGrid('#deviceList_footer', {edit:false, add:false, del:false, cloneToTop:true});

问题是,在开始时,自定义格式化程序的第三个参数具有数组类型,以后不再具有。因此,您必须将格式化程序修改为

formatter: function(value, options, rData){
    var model = '',
        str = "<a href='/administration/mdl/vwDevice.aspx?device_id=" +
              value + "' target='_blank'>" + value;
    if ($.isArray(rData)) {
        model = rData[4];
    } else {
        model = rData.model;
    }
    if (model) {
        str += " - " + model;
    }
    str += "</a>";
    return str;
}

为了能够读取新的JSON格式,jqGrid中唯一的更改是附加参数
jsonReader:{cell:'}
。查看结果。

问题在于,自定义格式设置程序的第三个参数在开始时具有数组类型,以后不再具有。因此,您必须将格式化程序修改为

formatter: function(value, options, rData){
    var model = '',
        str = "<a href='/administration/mdl/vwDevice.aspx?device_id=" +
              value + "' target='_blank'>" + value;
    if ($.isArray(rData)) {
        model = rData[4];
    } else {
        model = rData.model;
    }
    if (model) {
        str += " - " + model;
    }
    str += "</a>";
    return str;
}

为了能够读取新的JSON格式,jqGrid中唯一的更改是附加参数
jsonReader:{cell:'}
。查看结果。

能否包含一些可用于重现问题的测试JSON数据?能否包含一些可用于重现问题的测试JSON数据?谢谢!这正是我所需要的。未意识到rData在初始加载后正在更改类型。谢谢你给我的其他建议,谢谢!这正是我所需要的。未意识到rData在初始加载后正在更改类型。谢谢你给我的其他建议。
{ "rows" : [
    ["181", "Router A", "some description", "55.444.33.222", "Model 1"],
    ["291", "Router B", "some description", "55.333.22.444", "Model 2"],
    ["1346", "Router C", "some description", "55.111.44.333", "Model 3"],
    ["1999", "Router D", "some description", "55.222.11.000", "Model 4"]
]}