我有自定义过滤功能,它会传入自定义网址并通过以下方式重新加载网格数据:
function filter_grid(filter) {
grid = $(filter).parents('.ui-jqgrid-view').find('.grid');
/* build the url in here*/
$(grid).setGridParam({loadonce:false, datatype:'json'});
jQuery(grid).setGridParam({url:myurl}).trigger("reloadGrid");
$(grid).setGridParam({loadonce:true});
}
这样可以正常工作并按预期过滤数据。但是,我允许用户在模态窗口中打开网格,这也将在您第一次打开模式窗口但是时工作,如果您关闭窗口并重新打开它...过滤失败。我在控制台看到没有错误...只是重新加载似乎永远不会发生。有什么建议吗?
简而言之,每个网格都附有一个选择菜单。您可以在该菜单中选择一个选项,它将通过filter_grid
功能使用过滤后的数据重新加载网格。它通过使用新的url重新加载网格来重新加载,该url传入一些参数来过滤数据。
在gridComplete事件中,我将一个select输入元素(我稍后填充)附加到页面上的每个网格。每个人都有一类“过滤器”:
$("#grid1 .ui-jqgrid-titlebar:eq(1)").append("<select id='pdd_user' name='filter_user' class='category_select filter'><option value=''>All</option></select>")
我注意过滤器类的点击次数:
$('.filter').live('change', function() {
filter_grid(this);
});
如你所见,调用filter_grid
函数(我在第一次编辑我的问题时包含的那个函数),这就是用过滤后的数据重新填充网格的原因:
jQuery(grid).setGridParam({url:myurl}).trigger("reloadGrid");
我将它设置为loadonce:false因为网格设置为loadonce:true最初创建时(为了本地排序目的)所以我将其设置回loadonce:false,使用新url和params重新加载网格,然后将其设置回loadonce:true以便再次启用本地排序。
答案 0 :(得分:1)
我不完全理解您的问题,但我希望您能帮助我找到您的代码中的错误。我认为你应该删除对jqGrid 的loadonce
选项的任何操作。这是不必要的和危险的。要使用服务器数据重新加载网格,只需将datatype
设置为'json'
,然后使用.trigger("reloadGrid", [{page: 1, current: true}]);
重新加载网格(有关详细信息,请参阅here)。如果在重新加载后在网格中找到所选行,则参数current: true
有助于保持所选行。如果您使用数据分页,参数page: 1
可以提供帮助。如果用户选择第二页作为示例,然后reloadGrid
将启动,它将请求服务器也加载过滤结果的第二页。因此,可以在寻呼机中具有空网格和页码2。在setGridParam
或reloadGrid
的上述参数中将页码重置为1有助于这些情况。
设置loadonce: false
的问题可能是在设置loadonce: true
之前处理网格的重新加载。在这种情况下,网格中不会填充本地数据。因此,应永久设置选项loadonce: true
。
如果您使用服务器端分页和本地数据排序,我建议您另外阅读this answer。