Cómo reemplazar remapColums con remapColumnsByName en jqgrid gratis

Código de respuesta encómo persistir la fila actual en jqgrid

se usa para guardar el estado de jqgrid. Guarda el estado de la columna jqgrid usando números de columna. Si jqgrid colmodel se cambia en el servidor, esto causa un error de JavaScript en el navegador.

Congelar columna de rownum en JQGrid comentar yhttps://github.com/free-jqgrid/jqGrid/blob/master/README49.md describe el métodoremapColumnsByName . Esperaba que el uso de esto solucionara el problema.

jqgrid gratuito se descargó del git master de hoy. En estado guardar después de cambiar el tamaño de las columnas o mover la línea

saveColumnState.call($grid, $grid[0].p.remapColumns);

fue cambiado a

saveColumnState.call($grid, $grid[0].p.remapColumnsByName);

y en estado restaurar en carga Código completo

    if (isColState && myColumnsState.permutation.length > 0 &&
                      myColumnsState.permutation.length === cm.length) {
        $grid.jqGrid("remapColumns", myColumnsState.permutation, true);

    }

con

    if (isColState && myColumnsState.permutation.length > 0 &&
                      myColumnsState.permutation.length === cm.length) {
        $grid.jqGrid("remapColumnsByName", myColumnsState.permutation, true);
    }

Ahora línea

 if (isColState && myColumnsState.permutation.length > 0 &&

causa error

Uncaught TypeError: Cannot read property 'length' of undefined

¿Cómo arreglar esto para que el estado de la columna se pueda usar si se cambia la definición de la columna?

Los métodos se definen como

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));
    }
};

Respuestas a la pregunta(1)

Su respuesta a la pregunta