Ili*_*nin 1 jqgrid jqgrid-formatter
好吧,我只是准备把头发撕掉了.我正在使用JSON数据加载jqGrid,但将"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});
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我隐藏了模型列,并将该信息"移动"到设备列,因为这是它所显示的位置.它在加载时都很好,但是一旦我进行排序,或者搜索并刷新视图,数据的"复制"就会因某种原因而丢失.如果我显示模型列的信息仍然很好,它只是获取"未定义"值的设备列.
我试过触发"reloadGrid",没有帮助.我也尝试添加unformat函数,但我不确定我能在那里做什么.我基本上只是返回了一个$(cellobject).html() - 这显然不起作用.
编辑:添加了示例JSON数据
{ "rows" : [{
"id" : "181",
"cell" : ["181", "Router A", "some description", "55.444.33.222", "Model 1"]
}, {
"id" : "291",
"cell" : ["291", "Router B", "some description", "55.333.22.444", "Model 2"]
}, {
"id" : "1346",
"cell" : ["1346", "Router C", "some description", "55.111.44.333", "Model 3"]
}, {
"id" : "1999",
"cell" : ["1999", "Router D", "some description", "55.222.11.000", "Model 4"]
}
]}
Run Code Online (Sandbox Code Playgroud)
问题是,在开始时,自定义格式化程序的第三个参数具有数组类型,后来不再有.所以你必须修改格式化程序
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;
}
Run Code Online (Sandbox Code Playgroud)
然后排序将起作用:见这里.
还有一个提示.您使用列的key:true属性id.如果您不需要id两次包含相同的值.您可以将JSON数据减少到以下内容
{ "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"]
]}
Run Code Online (Sandbox Code Playgroud)
为了能够读取新的JSON格式,jqGrid中唯一的变化是附加参数jsonReader: {cell:''}.在这里查看结果.
| 归档时间: |
|
| 查看次数: |
2990 次 |
| 最近记录: |