Как заменить remapColums с remapColumnsByName в бесплатной jqgrid
Код из ответа вкак сохранить текущую строку в jqgrid
используется для сохранения состояния jqgrid. Сохраняет состояние столбца jqgrid, используя номера столбцов. Если jqgrid colmodel изменяется на сервере, это вызывает ошибку javascript в браузере.
Заморозить столбец rownum в JQGrid комментарий иhttps://github.com/free-jqgrid/jqGrid/blob/master/README49.md описывает методremapColumnsByName
, Я надеялся, что использование этого исправит проблему.
бесплатно jqgrid был загружен с сегодняшнего git master. В состоянии сохранить после изменения размера столбцов или перемещения строки
saveColumnState.call($grid, $grid[0].p.remapColumns);
был изменен на
saveColumnState.call($grid, $grid[0].p.remapColumnsByName);
и в состоянии восстановить в loadComplete код
if (isColState && myColumnsState.permutation.length > 0 &&
myColumnsState.permutation.length === cm.length) {
$grid.jqGrid("remapColumns", myColumnsState.permutation, true);
}
с
if (isColState && myColumnsState.permutation.length > 0 &&
myColumnsState.permutation.length === cm.length) {
$grid.jqGrid("remapColumnsByName", myColumnsState.permutation, true);
}
Сейчас линия
if (isColState && myColumnsState.permutation.length > 0 &&
вызывает ошибку
Uncaught TypeError: Cannot read property 'length' of undefined
Как это исправить, чтобы можно было использовать состояние столбца при изменении определения столбца?
Методы определяются как
var saveColumnState = function (perm) {
var colModel = this.jqGrid('getGridParam', 'colModel'),
i, l = colModel.length, colItem, cmName,
postData = this.jqGrid('getGridParam', 'postData'),
columnsState = {
search: this.jqGrid('getGridParam', 'search'),
page: this.jqGrid('getGridParam', 'page'),
rowNum: this.jqGrid('getGridParam', 'rowNum'),
sortname: this.jqGrid('getGridParam', 'sortname'),
sortorder: this.jqGrid('getGridParam', 'sortorder'),
autoedit: autoedit,
rownumbers: $grid.jqGrid('getGridParam', 'rownumbers') && !$grid[0].p.colModel[0].hidden,
searchWindow: searchParams,
editWindow: editParams,
permutation: perm,
selectedRows: idsOfSelectedRows,
colStates: {}
},
colStates = columnsState.colStates;
if (typeof (postData.filters) !== 'undefined') {
columnsState.filters = postData.filters;
}
for (i = 0; i < l; i++) {
colItem = colModel[i];
cmName = colItem.name;
if (cmName !== 'rn' && cmName !== 'cb' && cmName !== 'subgrid') {
colStates[cmName] = {
width: colItem.width,
hidden: colItem.hidden
};
}
}
saveObjectInLocalStorage(myColumnStateName, columnsState);
};
var saveObjectInLocalStorage = function (storageItemName, object) {
if (typeof window.localStorage !== 'undefined') {
window.localStorage.setItem(storageItemName, JSON.stringify(object));
}
};