jqGrid 在 .trigger("reloadGrid") 之后重新加载过滤器值
jqGrid Reload Filter Values After .trigger("reloadGrid")
我有一个启用了本地 filter/sort 功能的 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,那么我可以查看过滤器数据。
下面是使用 sort/filter 信息强制重新加载网格的代码。此代码位于 loadComplete() 的末尾。将数据类型设置为本地然后触发重新加载是让网格将 sort/filter 应用于网格的关键(当数据设置为 'json' 时重新加载,这将从服务器重新加载网格。)
var dtype = $('#gridtable').jqGrid("getGridParam", "datatype");
if (dtype == 'json'){
$("#gridtable").jqGrid("setGridParam", {datatype: 'local'});
setTimeout(function () {
p.search = true;
$("#gridtable").trigger("reloadGrid");
},0
);
}
我有一个启用了本地 filter/sort 功能的 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,那么我可以查看过滤器数据。
下面是使用 sort/filter 信息强制重新加载网格的代码。此代码位于 loadComplete() 的末尾。将数据类型设置为本地然后触发重新加载是让网格将 sort/filter 应用于网格的关键(当数据设置为 'json' 时重新加载,这将从服务器重新加载网格。)
var dtype = $('#gridtable').jqGrid("getGridParam", "datatype");
if (dtype == 'json'){
$("#gridtable").jqGrid("setGridParam", {datatype: 'local'});
setTimeout(function () {
p.search = true;
$("#gridtable").trigger("reloadGrid");
},0
);
}