【发布时间】:2012-02-13 20:30:26
【问题描述】:
我有一个自定义过滤功能,它传入一个自定义 url 并通过以下方式重新加载网格数据:
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 事件中,我将一个选择输入元素(稍后填充)附加到页面上的每个网格。每一个都有一个“过滤器”类:
$("#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 和参数重新加载网格,然后将其设置回 loadonce:true 以再次启用本地排序。
【问题讨论】:
-
您发布的代码难以理解。我想即使是代码也不正确(至少是你设置
loadonce:true的地方)。请描述代码应该做什么以及如果“过滤失败”会发生什么。您能先描述一下您是如何实现“自定义过滤器”的吗?您是否使用已弃用的filterGrid方法手动实现一些外部过滤器?请同时发布调用filter_grid函数的代码。 -
@Oleg 我已经更新了这个问题 Oleg,我希望它有助于澄清。
标签: javascript jquery jqgrid