【发布时间】:2016-06-18 08:57:52
【问题描述】:
我正在使用 jqGrid 使用以下代码在我的项目中显示订单,当我尝试使用网格上的刷新按钮进行刷新时,列状态的格式化程序,即函数 dropdownFormatter() 的 rowObject 变量未定义。
因此,当我尝试自动重新加载功能时,下拉菜单不会填充正确的参数。如果我将 jqGrid 属性“loadonce”设置为 false,这个问题就解决了。
但如果“loadonce”属性设置为false,下拉选择根本不会过滤网格。
jQuery("#list").jqGrid({
url:'http://192.168.0.7:8000/orders_get_open',
datatype: "json",
colNames:['Id','Order No','Address', 'Pincode', 'Phone Number', "Pickup Date", "Pickup Time", "Delivery Date", "Delivery Time", "Status", "Delivery Boys", "Actions"],
colModel:[
{name: 'order_id', index: 'order_id', hidden: true},
{name: 'order_no', index: 'order_no', width: 130},
{name: 'user_address',index: 'user_address', width: 400, search: false},
{name: 'pincode',index: 'pincode', width: 110, search: false},
{name: 'user_phone_number',index: 'user_phone_number', width: 180, search: false},
{name: 'pickup_date', index: 'pickup_date'},
{name: 'pickup_time', index: 'pickup_time'},
{name: 'delivery_date', index: 'delivery_date', width: 170},
{name: 'delivery_time', index: 'delivery_time', width: 170},
{
name: 'status', index: 'status', formatter: statusFormatter, stype: 'select', searchoptions: {
sopt: ['eq'], value: ':All;ordered:Ordered;received:Received;laundry_entry:Laundry Entry;laundry_exit:Laundry Exit;delivered:Delivered'
}
},
{name: 'delivery_boys', index: 'delivery_boys', formatter: dropdownFormatter, search: false},
{name: '', index:'', formatter: actionFormatter, search: false}
],
width: "1300",
height: "auto",
cache: false,
rowNum:10,
rowList:[10,20,30],
pager: '#pager',
loadonce: true,
sortname: 'id',
viewrecords: true,
sortable: true,
sortname: "order_no",
sortorder: "asc",
caption:"Order Details",
}).jqGrid('navGrid','#pager', {
edit:false,add:false,del:false, search: false, refresh: true
}).jqGrid('filterToolbar', {
stringResult: true, searchOnEnter: false, defaultSearch: "cn"
});
function dropdownFormatter(cellValue, options, rowObject) {
console.info(cellValue, options, rowObject);
console.log(rowObject.delivery_boy_id);
var control = "<select class='form-control'><option value>Select</option>";
$.each(cellValue, function (idx, obj){
if (obj.id == rowObject.delivery_boy_id) {
control += "<option value='" + obj.id + "' selected='selected'>" + obj.name + "</option>";
} else {
control += "<option value='" + obj.id + "'>" + obj.name + "</option>";
}
});
control += "</select>";
return control;
}
样本数据:https://api.myjson.com/bins/22vo1
jsfiddle 代码:http://jsfiddle.net/76588Lev/1/
【问题讨论】:
-
您使用哪个版本的 jqGrid 以及来自哪个分支([free jqGrid]()、[Guriddo jqGrid JS]() 或版本
-
这是来自脚本文件:* @license jqGrid 4.6.0 - jQuery Grid * 版权所有 (c) 2008, Tony Tomov, tony@trirand.com
-
4.6 版已经死了。我开发free jqGrid。它是旧 jqGrid 的分支。我修复了免费 jqGrid 中的许多旧错误并实现了许多错误。如果我只是将 jqGrid 4.6 替换为释放 jqGrid 4.13.0,那么代码就可以工作:jsfiddle.net/OlegKi/76588Lev/2。例如,您可以使用来自 CDN 的免费 jqGrid(参见 the wiki article)。顺便说一下free jqGrid另外设置了
options.rowData,它保存了输入数据always命名格式(options.rowData.delivery_boy_id) -
我建议您在
order_id列中设置key: true属性或删除 列order_id并使用prmNames: { id: "order_id" }。您可以从所有列中删除index属性,并对代码进行许多其他小的缩减。顺便说一句,免费的 jqGrid 支持 Bootsrtap。请参阅the demo 包含在the readme 中 -
我刚刚尝试了你修改的小提琴,我仍然无法按状态过滤网格。我做错了吗?
标签: javascript jquery jqgrid