2010-10-03 33 views
6

Necesito pasar userData a jqgrid, pero no puedo encontrar ningún ejemplo de cómo hacerlo. Aquí está mi intento:¿Cómo se lee userData en jqgrid?

enviado desde el servidor:

{ total: 25, 
    page: currentpage, 
    userData: {foo: 'bar'}, 
    rows: myRows } 

y en jqGrid:

var data = jQuery("#grid").getGridParam('userData'); 

¿Cómo puedo enviar userData y leerlo desde jqGrid?

EDITAR: Sé que se está enviando userData, porque puedo verlo en Fiddler. Creo que estoy atascado en cómo leerlo en el lado del cliente.

Respuesta

16

En general, el uso de userData es bastante simple. jqGrid le brinda soporte para enviar desde el servidor datos adicionales de que se guardarán junto con los datos de jqGrid. Entonces, si jqGrid analiza los datos devueltos por el servidor, simplemente busca userdata (no para userData !!!) y se guarda en el parámetro interno userData.

{ "total":25, 
    "page":1 
    "records":107, 
    "userdata": {"foo": "bar"}, 
    "rows": [...] } 

CUIDADO: la propiedad predeterminada en los datos de entrada debe ser userdata y NOuserData como que tiene actualmente. Puede sobrescribir el nombre predeterminado de la propiedad de entrada jsonReader: {userdata: "userData"} o jsonReader: {userdata: "myData"} si usa userData o myData como nombre de propiedad con su additional data.

Uno del uso estándar de userData es para displaying of the footer en el jqGrid. Puede usar los datos para cualquier otra propuesta. En another answer se muestra cómo usar userData para seleccionar algunas filas/filas directamente después de cargar los datos del servidor.

Si utiliza loadonce:true parámetro, el uso de userData será un poco más complicado, porque después de la primera carga se eliminarán los datos del parámetro userData, así que hay que guardar allí en el objeto externo.

De causa que puede acceder al userData con respecto a jQuery("#grid").getGridParam('userData') solo después de cargar los datos. Por lo tanto, debe hacer esto dentro del identificador de evento loadComplete o posterior. Por cierto, dentro del identificador de evento loadComplete puede acceder a todos los datos que se le envían desde el servidor a través del parámetro data del evento loadComplete. Para que pueda leer cualquier otro dato adicional y guardarlo en alguna parte.

+1

Gracias.En caso de que alguien lea esto más adelante, el resumen es que cuando se habla de un GridParam es 'userData', de lo contrario, es' userdata'. Lea 'userdata' en el controlador de eventos' loadComplete'. Para establecer 'postData' con' userdata' haz esto: 'loadComplete: function (data) {jQuery (" # ticketlist "). SetGridParam ({postData: {foo2: data.userdata.foo}});}' – royco

+0

@Slack : También puede usar 'jQuery (" # grid "). GetGridParam ('userData')' dentro de 'loadComplete' como' loadComplete: function() {jQuery ("# ​​ticketlist"). SetGridParam ({postData: {foo2: jQuery ("# ​​grid"). getGridParam ('userData'). foo}});} '. Solo es importante entender que en el envío de datos desde el servidor hay que colocar 'userdata' y los datos se guardarán en el parámetro' userData' de jqGrid. Entonces puede ser accesible a través de 'getGridParam ('userData')'. Pero lo más importante es que ahora su programa funciona y puede usar 'userdata' /' userData'. :-) – Oleg

+0

hombre He estado usando userData en lugar de userdata en el generador json y me he estado volviendo loco, ¡muchas gracias! +1 – Neo

1

jqGrid acepta de manera predeterminada JSON en este formato.

{"rows": 
    [{"foo":"bar"}] 
} 

y configurar las opciones jqGrid que haría algo como esto:

$("#cashflow-sheet").jqGrid({ 
    url:'bbc-json.html', 
    datatype: "json", 
     ... 
+0

Gracias por su post. De hecho, tengo jqgrid funcionando bien y puedo mostrar las filas sin ningún problema. Omití ese código. Lo que no entiendo es cómo usar la función 'userData' de jqgrid. Esto le permite enviar una matriz de datos de usuario desde el servidor a la grilla. – royco

Cuestiones relacionadas