离开站点后在localStorage中保存jqGrid的状态
我想在用户离开站点时保存jqGrid的状态(排序列、排序顺序、列的宽度、工具栏搜索字段),并在用户返回站点时恢复网格 我的第一次尝试是使用离开站点后在localStorage中保存jqGrid的状态,jqgrid,local-storage,Jqgrid,Local Storage,我想在用户离开站点时保存jqGrid的状态(排序列、排序顺序、列的宽度、工具栏搜索字段),并在用户返回站点时恢复网格 我的第一次尝试是使用getGridParam方法加载数据,然后用JSON序列化数据,并将其保存为cookie中的JSON字符串。但是cookie没有足够的空间来保存gridParam。 所以我决定使用localstorage来保存网格的状态。我的代码如下所示: $(window).unload(function () { // Load GridParam var
getGridParam
方法加载数据,然后用JSON序列化数据,并将其保存为cookie中的JSON字符串。但是cookie没有足够的空间来保存gridParam。
所以我决定使用localstorage来保存网格的状态。我的代码如下所示:
$(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并尝试恢复网格。加载数据也没有问题。在调试模式下,我可以看到所有数据都正确地从本地存储加载。但是如果我想用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');
}
}
这就是我保存网格状态的方式(作为隐藏字段中的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事件中加载保存的数据):
你能告诉我在哪里调用saveGridParameters()方法吗?这取决于你什么时候需要保存数据-在上面的例子中,它将在
$(window.unload)中调用(函数(){})代码>
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');
}
},