У меня есть jqGrid, где включена функция локального фильтра/сортировки. Я перезагружаю сетку (с сервера), когда щелкнула пользовательская кнопка обновления, которая вызывает .trigger («reloadGrid») после того, как я установил тип данных в JSON. Перезагрузка прошла успешно, однако, когда в одном из полей фильтра в верхней части столбца есть значение, оно теряет это значение.jqGrid Обновить значения фильтра После .trigger («reloadGrid»)
Я пытаюсь сохранить postData.filters перед установкой значения в JSON, после перезагрузки я пытаюсь установить новые фильтры на сохраненное значение, установите данные на локальные, а затем перезагрузите сетку.
Вот то, что я до сих пор:
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 undefined» в консоли. Если я распечатаю postData ПОСЛЕ перезагрузки (в loadComplete), я могу просмотреть данные фильтра.
Вызывается ли 'refreshGrid' вообще? Я не знаю struts2. Вы можете использовать 'onclick: refreshGrid' внутри' navigatorExtraButtons' и определить 'refreshGrid' отдельно как функцию? ** Не могли бы вы включить свой текущий код 'loadComplete'? ** В любом случае строка' var p = $ ('# gridtable'). JqGrid ("getGridParam", "postData"); 'неверно. Это должно быть 'var p = $ ('# gridtable'). JqGrid (" getGridParam ");'. Я рекомендую вам использовать 'p.previouslySavedFilter = p.postData.filters' – Oleg
@Oleg: я добавил код для loadComplete. Кроме того, я попробовал 'p = $ ('# gridtable'). JqGrid (" getGridParam ")', но он возвращает undefined, я могу использовать '(" getGridParam "," postData ")' и он возвращает '{" groupOp ": «AND», «rules»: [{«field»: «taxIdNbr», «op»: «bw», «data»: «11365»}]} ' – user3420328
Значение' $ ('# gridtable'). JqGrid («getGridParam», «postData») 'в' refreshGrid' и в 'loadComplete' должно быть ** одинаковым **. Почему у вас в одном случае 'undefined'. Кстати, использование 'bind' внутри' .subscribe ('loadComplete', ... '** неверно **. Это означает, что вы делаете ** новое связывание ** на каждом' loadComplete'. Если вы сортировать по столбцу или перейти на новую страницу, тогда будет выполняться 'loadComplete', и у вас будет ** множественная ** привязка к тому же событию. Это неправильно. Вы должны переместить код с привязками * вне *' .subscribe'. Мне нужно уйти сейчас и продолжить завтра, – Oleg