jqGrid beforeProcessing停止加载和ReloadGrid

时间:2015-12-03 07:33:27

标签: jqgrid free-jqgrid

这是我的例子: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
    }
}

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解您要实施的内容。如果服务器返回一些其他信息,我猜你想要应用过滤器。

似乎您在jqGrid和服务器之间实现了一些关于返回数据的自定义协议。 rows服务器响应的一部分应该是项目数组。在您的情况下,服务器可以将空字符串设置为rows的值。您尝试使用服务器响应的inputCol属性强制过滤以前加载的数据。您对现有过滤器进行了一些自定义修改,您填充了过滤器工具栏的某些字段,最后尝试使用triggerToolbar。代码非常不清楚,它包含许多你没有直接描述的假设。我不清楚您是否要启动本地过滤,或者jqGrid应该使用修改后的过滤器向服务器发送新请求。

无论如何,如果你想在其他回调函数中启动某种重载/过滤,你可以考虑一些基本规则。首先,方法triggerToolbar或触发reloadGrid可以同步。这意味着jqGrid首先使triggerToolbar生成reloadGrid,直到结束,然后执行$("#jqGridPreparate")[0].triggerToolbar();之后的下一行代码。因此,严格建议将triggerToolbarreloadGrid的所有来电置于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
    }
}