jqGrid - 自定义过滤可用,但在模态窗口中重新打开网格后无效

时间:2012-02-13 20:30:27

标签: javascript jquery jqgrid

我有自定义过滤功能,它会传入自定义网址并通过以下方式重新加载网格数据:

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以便再次启用本地排序。

1 个答案:

答案 0 :(得分:1)

我不完全理解您的问题,但我希望您能帮助我找到您的代码中的错误。我认为你应该删除对jqGrid loadonce选项的任何操作。这是不必要的和危险的。要使用服务器数据重新加载网格,只需将datatype设置为'json',然后使用.trigger("reloadGrid", [{page: 1, current: true}]);重新加载网格(有关详细信息,请参阅here)。如果在重新加载后在网格中找到所选行,则参数current: true有助于保持所选行。如果您使用数据分页,参数page: 1可以提供帮助。如果用户选择第二页作为示例,然后reloadGrid将启动,它将请求服务器也加载过滤结果的第二页。因此,可以在寻呼机中具有空网格和页码2。在setGridParamreloadGrid的上述参数中将页码重置为1有助于这些情况。

设置loadonce: false的问题可能是在设置loadonce: true之前处理网格的重新加载。在这种情况下,网格中不会填充本地数据。因此,应永久设置选项loadonce: true

如果您使用服务器端分页和本地数据排序,我建议您另外阅读this answer