这是我的例子:enter link description here
如何自动重新加载?
beforeProcessing: function (data, status, xhr) {
if (data.rows === '') {
$('#jqGridPreparate').jqGrid('clearGridData');
return false;
}
if (data.inputCol) {
$("td.ui-search-input input#id_prep").val('');
$("td.ui-search-input input#id_opisanie").val(data.inputCol);
var rplc = $.parseJSON($("#jqGridPreparate")[0].p.postData.filters);
for (var i=0; i < rplc.rules.length; i++) {
if (rplc.rules[i].field === 'prep') {
rplc.rules[i].field = 'opisanie';
}
}
$.extend($("#jqGridPreparate")[0].p.postData,{filters:JSON.stringify(rplc)});
$("#jqGridPreparate")[0].triggerToolbar(); // not WORK
}
}
答案 0 :(得分:0)
我不确定我是否完全理解您要实施的内容。如果服务器返回一些其他信息,我猜你想要应用过滤器。
似乎您在jqGrid和服务器之间实现了一些关于返回数据的自定义协议。 rows
服务器响应的一部分应该是项目数组。在您的情况下,服务器可以将空字符串设置为rows
的值。您尝试使用服务器响应的inputCol
属性强制过滤以前加载的数据。您对现有过滤器进行了一些自定义修改,您填充了过滤器工具栏的某些字段,最后尝试使用triggerToolbar
。代码非常不清楚,它包含许多你没有直接描述的假设。我不清楚您是否要启动本地过滤,或者jqGrid应该使用修改后的过滤器向服务器发送新请求。
无论如何,如果你想在其他回调函数中启动某种重载/过滤,你可以考虑一些基本规则。首先,方法triggerToolbar
或触发reloadGrid
可以同步。这意味着jqGrid首先使triggerToolbar
生成reloadGrid
,直到结束,然后执行$("#jqGridPreparate")[0].triggerToolbar();
之后的下一行代码。因此,严格建议将triggerToolbar
或reloadGrid
的所有来电置于setTimeout
内。它允许处理当前回调直到结束,然后才重新加载。如果来自服务器的响应包含您的自定义信息而不是典型的jqGrid数据,那么您应该从false
返回beforeProcessing
以停止标准处理。
如果您可以构建postData.filters
,则无需使用triggerToolbar
来应用过滤器。除此之外,您还需要另外设置jqGrid的search: true
参数,然后只触发reloadGrid
。
相应的代码可以是以下内容:
beforeProcessing: function (data, status, xhr) {
var $self = $(this), p = $self.jqGrid("getGridParam");
if (data.rows === "") {
$self.jqGrid("clearGridData");
return false; // don't process the data by jqGrid
}
if (data.inputCol) {
var i, rplc = $.parseJSON(p.postData.filters);
for (i = 0; i < rplc.rules.length; i++) {
if (rplc.rules[i].field === "prep") {
rplc.rules[i].field = "opisanie";
}
}
p.postData.filters = JSON.stringify(rplc);
setTimeout(function () {
// apply the filter
p.search = true;
$self.trigger("reloadGrid", [{page: 1}]);
}, 50);
return false; // don't process the data by jqGrid
}
}