我有一个显示大量数据的 jqgrid。通过 jquery ajax 调用(在 jqgrid 逻辑之外)定期从服务器检索数据。将检索到的数据与之前重试的数据进行比较(并在 js 中存储为 var。它用作 jqgrid 的数据)。如果它们不同,则刷新本地数据,然后触发 jqgrid 重新加载。jqgrid 数据类型是 jsonstring。
此解决方案运行良好,除非用户在过滤器工具栏中有过滤器值。因为我设置了一个 0.1 秒的计时器来触发 loadcomplete 事件中的过滤器,所以当有过滤器字符串时,整个网格刷新如下所示:
- 最初在 jqgrid 中显示了 20 条记录(因为用户正在过滤列中的某个值)
- jqgrid 被刷新,因为分开的 ajax 调用从服务器轮询的数据与浏览器中存储的数据不同
- jqgrid 将在很短的时间内显示所有新数据
- jqgrid 过滤器在 loadcomplete 内触发。屏幕再次显示 20 条记录。
它在技术上仍然有效。但是有没有办法在可视化网格之前在 jsonstring 上本地重新应用过滤器?换一种说法,jqgrid 可以只可视化一次,这将同时加载新的 jsonsting 并应用之前放置在过滤器框中的过滤器?
谢谢卡比
更新:
我尝试了 Oleg 的一种解决方案,在重新加载网格时应用过滤器。这是演示。只要数据类型是本地的,它就可以完美地工作。我的页面实际上使用数据类型 jsonstring 来重新加载网格。代码中的这个函数似乎确实适用于 jsonstring。我希望在外部 jquery ajax 成功从服务器检索数据后调用这样的函数。
function filter() {
var searchFiler = $("#filter").val(), f;
if (searchFiler.length === 0) {
grid[0].p.search = false;
$.extend(grid[0].p.postData,{filters:""});
}
f = {groupOp:"OR",rules:[]};
f.rules.push({field:"name",op:"cn",data:searchFiler});
f.rules.push({field:"note",op:"cn",data:searchFiler});
grid[0].p.search = true;
$.extend(grid[0].p.postData,{filters:JSON.stringify(f)});
grid.trigger("reloadGrid",[{page:1,current:true}]);
}
有人可以帮帮我吗?非常感谢。