Estoy usando un formateador personalizado para mi jqGrid columnModel y yo no puedo conseguir la clasificación para el trabajo con el formateador de funciones. Si puedo eliminar el formateador de la columna de tipo normalmente.

jQuery("#listAgentOptions").jqGrid({
    height: 240,
    datatype: "local",
    colNames: [' ', 'First Name', 'Last Name', 'Role'],
    colModel: [
    { name: 'status', index: 'status', width: 18, sorttype: 'text', align: 'center', formatter: function(cellvalue, options, rowObject) {
        return cellvalue == 1 ? "<img src='images/agent_green_s.png' alt='Ready' title='Ready' />" :
        cellvalue == 3 ? "<img src='images/agent_red_s.png' alt='Busy' title='Busy' />" :
        "<img src='images/agent_orange_s.png' alt='Pending Ready' title='Pending Ready' />";
    },
        unformat:
    function(cellvalue, options, rowObject) { return Math.floor(Math.random() + 0.1).toString(); }
    },
    { name: 'firstName', index: 'firstName', width: 92 },
    { name: 'lastName', index: 'lastName', width: 142 },
    { name: 'role', index: 'role', sorttype: 'int', width: 36, align: 'center', formatter: function(cellvalue, options, rowObject) {
        return cellvalue == true ? "<img src='images/user_gray.png' alt='Supervisor' title='Supervisor' />" : "<img src='images/user.png' alt='Agent' title='Agent' />";
    }, unformat:
    function(cellvalue, options, rowObject) { return cellvalue; }
    }
    ],
    sortname: 'lastName'
});

Se agregan filas como este:

jQuery("#listAgentOptions").jqGrid('clearGridData');
$.each(result, function(i, item) {
    if (item.ContactType == 1) {
        jQuery("#listAgentOptions").jqGrid('addRowData', i+1, { firstName: item.ContactName.split(" ")[0], lastName: item.ContactName.split(" ")[1],
        role: item.IsSupervisor,
        status: item.Status == "Ready" ? 1 : item.Status == "Busy" ? 3 : 2
        });
    }
});

¿Cómo puedo obtener la clasificación para que funcione correctamente?

Actualización. Acabo de descargar la última versión de jqGrid – mismo problema.

También he intentado usar unformat: function(cellvalue, options, rowObject) { } pero cellvalue está vacía allí :-E Cuando yo uso return Math.floor(Math.random() + 0.1).toString(); lo hace a ordenar las cosas al azar (cada vez que hago clic en), pero return cellvalue; sólo devuelve una cadena vacía.

4 Comentarios

  1. 2

    Internamente, jqGrid utiliza unformat para obtener el valor de la celda:

            $.each(ts.rows, function(index, row) {
                try { sv = $.unformat($(row).children('td').eq(col),{rowId:row.id, colModel:ts.p.colModel[col]},col,true);}
                catch (_) { sv = $(row).children('td').eq(col).text(); }
                row.sortKey = findSortKey(sv);
                rows[index] = this;
            });

    Un valor de celda, a continuación se analiza utilizando el controlador de la columna sorttype, en el caso de int:

                findSortKey = function($cell) {
                    return IntNum($cell.replace(stripNum, ''),0);
                };

    Así que, básicamente, si su unformat función devuelve el correcto entero para cada celda, yo esperaría que la columna de clasificación para trabajar así. Si usted todavía tiene problemas, por favor enviar su código completo, incluyendo el contenido de unformat.

    • Sí, pero cellvalue que se pasa a unformat está vacío por alguna razón.
  2. 1

    Puede ser tu problema no es donde usted está buscando.

    Qué tipo de datos de tenencia de uso en el jqGrid? Me refiero a que el valor de parámetro tipo de datos. Si carga el jqGrid de datos desde el servidor, el servidor recibe la clasificación de la información desde el cliente y el servidor deben dar a los datos ordenados de la espalda. Formateador utiliza sólo para la visualización de datos como prefiera. Del lado del cliente clasificación trabajo, por ejemplo con datatype: 'xmlstring' y datatype: "clientSide", pero no con dataType:"xml" o dataType:"json" y dataType:"jsonp". Parámetros como sorttype sólo funciona con el lado del cliente de la clasificación y será ignorado con del lado del servidor de ordenación. El papel principal: si usted tiene que definir url parámetro de jqGrid, use el lado del servidor de la clasificación.

    • el tipo de datos es ‘local’
    • Usted escribió a menos que la información en su pregunta. Podría publicar un código de la jqGrid. Entonces uno podría reproducir y resolver su problema.
  3. 1

    OK, me he dado cuenta de lo que está pasando.

    Primero de todo tienes que utilizar unformat para pasar el valor inicial de regreso a jqGrid función de ordenación.

    jqGrid es pasar $(row).text() a unformat función, que para las células con sólo una etiqueta html devuelve una cadena vacía, y no hay ninguna opción para cambiarlo. Sin embargo, lo que puedes hacer es usar el tercer parámetro de unformat función, que en mi caso es rowObject. Puede recuperar el valor real de la celda mediante el uso de $(rowObject).html() y analizar de nuevo el valor. Clasificación de ahora funcionará.

    Otra cosa a recordar es que si usted está utilizando sorrtype: 'int' usted tendrá que volver entero como una cadena de texto, como return '1';.

  4. 0

    Intenta depurar usando Firebug y comprobar lo que el servidor está recibiendo. Uso sortable: true.

    Por el camino, la sorttype parámetro sólo funciona localmente (datatype: local).

    • No hay servidor, es ordenar una matriz.

Dejar respuesta

Please enter your comment!
Please enter your name here