簡體   English   中英

.trigger(“ reloadGrid”)之后的jqGrid重新加載過濾器值

[英]jqGrid Reload Filter Values After .trigger(“reloadGrid”)

我有一個jqGrid,其中啟用了本地過濾器/排序功能。 單擊自定義刷新按鈕(將數據類型設置為JSON之后,調用.trigger(“ reloadGrid”))時,我正在從服務器重新加載網格。 重新加載成功,但是,在列頂部的過濾器字段之一中有一個值時,它將丟失該值。

我試圖在將值設置為JSON之前保存postData.filters,然后在重新加載后嘗試將新的過濾器設置為已保存的值,將數據設置為本地,然后重新加載網格。

這是我到目前為止的內容:

var previouslySavedFilter;
var p;    

$.subscribe('loadComplete', function(event, data) {
    //Set Grid Attributes
    $("#gridtable").jqGrid('setGridParam', {
        ignoreCase : true
    });

    //Bind events to refresh grid
    $("#gridtable").bind("jqGridAddEditAfterSubmit", function () {
        $(this).jqGrid("setGridParam", {datatype: 'json'});
            return [true];
    });

    $("#refresh_gridtable").bind("click", function(){
        $("#gridtable").jqGrid("setGridParam", {datatype: 'json'});
        return [true];
    });

    //Set Up to Apply Local Filters
    var p = $('#gridtable').jqGrid("getGridParam", "postData");
    var dtype = $('#gridtable').jqGrid("getGridParam", "datatype");

    if (dtype === "json") {
        setTimeout(function () {
            console.log("Value of p on loadComplete: " + JSON.stringify(p.filters));
            console.log("Value of previouslySavedData on loadComplete: " + JSON.stringify(previouslySavedFilter));

            p.filters = previouslySavedFilter; 
            p.search = true;
            $("gridtable").trigger("reloadGrid");
            alert("Hey");
        }, 
        50);
    };
}

function refreshGrid(){
    var p = $('#gridtable').jqGrid("getGridParam", "postData");
    console.log("Value of P in reFreshGrid: " + JSON.stringify(p)); 
    previouslySavedFilter = p.postData.filters;

    $("#gridtable").jqGrid("setGridParam", {datatype: 'json'});
    $("#gridtable").trigger("reloadGrid");
}


<sjg:grid
    id="gridtable"
    navigatorExtraButtons="{
    refresh:{ 
        title:'Refresh', 
        icon:'ui-icon-refresh',
        onclick:refreshGrid
    }
    ...
>

在將數據類型設置為JSON並重新加載網格之前,我不知道如何保存過濾器。 上面的代碼在控制台中顯示“ p is undefined”。 如果在重裝后(在loadComplete中)打印出postData,則可以查看過濾器數據。

下面的代碼將使用排序/過濾器信息強制網格重新加載。 此代碼位於loadComplete()的末尾。 將數據類型設置為本地然后觸發重新加載是使網格將排序/過濾器應用於網格的關鍵(當數據設置為“ json”時重新加載,這將從服務器重新加載網格。)

var dtype = $('#gridtable').jqGrid("getGridParam", "datatype");

if (dtype == 'json'){
    $("#gridtable").jqGrid("setGridParam", {datatype: 'local'});    
    setTimeout(function () {
        p.search = true;
        $("#gridtable").trigger("reloadGrid");
        },0
    );
}

暫無
暫無

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

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