【问题标题】:Save state of jqGrid in localStorage after leaving the site离开站点后在localStorage中保存jqGrid的状态
【发布时间】:2011-06-30 16:29:17
【问题描述】:

我想在用户离开站点时保存 jqGrid 的状态(排序列、排序顺序、列宽、工具栏搜索字段),并在他返回站点时恢复网格。

我的第一次尝试是使用 getGridParam 方法加载数据,然后使用 JSON 对其进行序列化,并将其作为 JSON-String 保存在 cookie 中。但是 cookie 没有足够的空间来保存 gridParam。 所以我决定使用 localstorage 来保存 Grid 的状态。我的代码如下所示:

$(window).unload(function () {
    // Load GridParam
    var gridData = $('#Grid').jqGrid('getGridParam')};
    // Serialize it to as JSON-String
    var gridDataAsString = $.toJSON(gridData);
    // Save the serialized Griddata in the localStorage
    localStorage.setItem("GridParam", gridDataAsString);
});

这很好用。但在下一步中,我从 localStroage 加载 GridParam 并尝试恢复网格。加载数据也没有问题。在调试模式下,我可以看到所有数据都从 localStorage 正确加载。但是,如果我想使用setGridParam 方法恢复网格,则网格具有所有默认值。我的代码如下所示:

$(document).ready(function () {
    $("#Grid").jqGrid({ /* Initialize the grid with default values */ });

    var loadedGridDataAsString = localStorage.getItem("GridParam");
    // Use the default value if no data exists in localStorage
    if (loadedGridDataAsString != null) {
        // Deserialize the JSON-String to an object
        var loadedGridData = $.evalJSON(loadedGridDataAsString);
        $("#Grid").jqGrid('setGridParam', loadedGridData);
        $("#Grid").trigger('reloadGrid');
    }
}

【问题讨论】:

    标签: jqgrid local-storage


    【解决方案1】:

    这就是我保存网格状态的方式(虽然不是本地存储,但作为隐藏字段中的 json 数据,但想法应该是相同的)。

    将网格参数保存为隐藏字段中的 JSON:

     function saveGridParameters(grid) {       
                var gridInfo = new Object();
    
                gridInfo.url = grid.jqGrid('getGridParam', 'url');
                gridInfo.sortname = grid.jqGrid('getGridParam', 'sortname');
                gridInfo.sortorder = grid.jqGrid('getGridParam', 'sortorder');
                gridInfo.selrow = grid.jqGrid('getGridParam', 'selrow');
                gridInfo.page = grid.jqGrid('getGridParam', 'page');
                gridInfo.rowNum = grid.jqGrid('getGridParam', 'rowNum');
                gridInfo.postData = grid.jqGrid('getGridParam', 'postData');
                gridInfo.search = grid.jqGrid('getGridParam', 'search');
    
                $('#gridParams').val(JSON.stringify(gridInfo));
            }
    

    加载保存的数据:(我在网格的 beforeRequest 事件中加载保存的数据):

                    beforeRequest: function() //loads the jqgrids state from before save
                    {
                        if(gridParams !=null && gridParams!="")
                        {                            
                            var gridInfo = $.parseJSON(gridParams);                                    
                            var grid = $('#ReportPartsGrid');                           
    
                            grid.jqGrid('setGridParam', { url: gridInfo.url });
                            grid.jqGrid('setGridParam', { sortname: gridInfo.sortname });
                            grid.jqGrid('setGridParam', { sortorder: gridInfo.sortorder });
                            grid.jqGrid('setGridParam', { selrow: gridInfo.selrow });
                            grid.jqGrid('setGridParam', { page: gridInfo.page });
                            grid.jqGrid('setGridParam', { rowNum: gridInfo.rowNum });
                            grid.jqGrid('setGridParam', { postData: gridInfo.postData });
                            grid.jqGrid('setGridParam', { search: gridInfo.search });
    
                            gridParams = '';
                            $('#ReportPartsGrid').trigger('reloadGrid');                           
                        }                                               
                    },
    

    【讨论】:

    • 你能告诉我在哪里调用 saveGridParameters() 方法吗?
    • 取决于您何时需要保存数据 - 在上面的示例中,它将在 $(window).unload(function () {}); 中调用
    猜你喜欢
    • 2013-10-21
    • 2020-04-17
    • 1970-01-01
    • 2012-10-01
    • 2020-11-19
    • 1970-01-01
    • 2011-12-31
    • 2018-04-21
    • 1970-01-01
    相关资源
    最近更新 更多