簡體   English   中英

free-jqGrid(4.15.4),服務器過濾器,客戶端排序和分頁?

[英]free-jqGrid (4.15.4), server filter, client sorting and paging?

嘗試基於多重搜索/過濾器從服務器加載數據,但在客戶端上進行排序和分頁。 我發現一些帖子說只需在beforeSearch方法中將數據類型設置回原始值。

我已經嘗試過了,它確實針對服務器執行並返回正確的數據。 但是,第二次我過濾它似乎是從服務器獲取數據,但隨后在下面顯示的jqgrid代碼的第4429行上將其清除。 關於如何實現這一目標的任何想法?

第4429章真相

網格定義:

$element
    .jqGrid({
        cmTemplate: { search: true, searchoptions: { attr: { placeholder: "filter..." }, clearSearch: true }, sortable: true, align: "center" },
        colModel: [
            { name: "Id", key: true, hidden: true, searchoptions: { searchhidden: true, sopt: ["eq"] } },
            { name: "TransmissionId", label: "Transmission Id", searchoptions: { sopt: ["eq"] } },
            { name: "Name", label: "Name", searchoptions: { sopt: ["cn"] } }
        ],
        datatype: "json",
        loadonce: true,
        height: "auto",
        ignoreCase: true,
        pager: $("#" + pagerId),
        pgbuttons: true,
        pginput: false,
        rowList: [10, 25, 50],
        rowNum: 10,
        toppager: true,
        url: "url here",
        loadComplete: function (data) {
            if (this.p.datatype === "json") {
                setTimeout(function () {
                    $element.trigger("reloadGrid", [{ page: 1 }]);
                }, 50);
            }
            return data;
        },
        viewrecords: true
    })
    .jqGrid("filterToolbar", {
        autosearch: true,
        defaultSearch: "cn",
        beforeSearch: function () {
            $element.setGridParam({ datatype: "json", page: 1 });
        }
    })
    .jqGrid("navGrid", "#" + pagerId, {
        edit: false,
        add: false,
        del: false,
        refresh: false,
        view: false,
        cloneToTop: true
    });

我已整理網格以嘗試驗證不是導致此問題的自定義邏輯。 網格確實啟用了multipleSearch 但上面沒有定義。

如果我正確理解您的問題,則應結合使用forceClientSorting: trueloadonce: true 它強制從服務器加載的數據將在從服務器加載后直接在本地進行排序,過濾和分頁。 因此,您可以刪除當前使用的loadComplete 查看演示的答案

另外,您可以添加searching屬性,其中包括filterToolbarsearchGrid所有選項:

searching: {
    autosearch: true,
    defaultSearch: "cn",
    beforeSearch: function () {
        var p = $(this).jqGrid("getGridParam"), // get reference to all parameters
            filters = JSON.parse(p.postData.filters);
        p.datatype = "json";
        // one can here analyse filters, modify it or clear it as
        p.postData.filters = "";
        // one can set any other parameters, which will be sent to the server
        // by using p.postData.param1 = "value1";
        // which will sent param1=value1 to the server.
    }
}

通常,您也可以在當前的beforeSearch執行相同的操作。

更新:可能您應該另外使用beforeProcessing回調。 從服務器接收到數據后,將直接調用beforeProcessing 在回調內部,您可以清理所有p.postData.filters (到"" )和p.search (將它從true更改為false )。 結果jqGrid將不會嘗試通過postData.filters進行本地過濾。請過濾從服務器返回的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM