oncomplete oncellselect loaderror getcolprop getcell docs javascript json syntax jqgrid

javascript - loaderror - oncellselect jqgrid



jqGrid Sort or Search no funciona con columnas con notaciĆ³n json dot (2)

Después de cambiar la definición de la última columna de {name:amount} a {name:''amount''} pude reproducir su problema: la clasificación en ''Estado'' no funciona, pero no pude ver ningún mensaje de error (ver la demostración )

Uno puede solucionar el problema si cambia la definición de la segunda columna de

{name:''meta.status'', sortable:true}

a

{name:''status'', sortable:true, jsonmap: "meta.status"}

Vea la demostración fija aquí .

Tengo este jqGrid:

$("#report").jqGrid( { url: ''/py/db?coll=report'', datatype: ''json'', height: 250, colNames: [''ACN'', ''Status'', ''Amount''], colModel: [ {name:''acn'', sortable:true}, {name:''meta.status'', sortable:true}, {name:''amount''} ], caption: ''Show Report'', rownumbers: true, gridview: true, rowNum: 10, rowList: [10,20,30], pager: ''#report_pager'', viewrecords: true, sortname: ''acn'', sortorder: "desc", altRows: true, loadonce: true, mtype: "GET", rowTotal: 1000, jsonReader: { root: "rows", page: "page", total: "total", records: "records", repeatitems: false, id: "acn" } });

Observe que la columna ''meta.status'' está en notación de puntos JSON y, en consecuencia, los datos enviados desde el servidor son los siguientes:

{"page": "1", "total": "1", "records": "5", "rows": [ {"acn":1,"meta": {"status":"Confirmed"}, "amount": 50}, {"acn":2,"meta": {"status":"Started"}, "amount": 51}, {"acn":3,"meta": {"status":"Stopped"}, "amount": 52}, {"acn":4,"meta": {"status":"Working"}, "amount": 53}, {"acn":5,"meta": {"status":"Started"}, "amount": 54} ] }

Los problemas son de doblez:

  • La ordenación no funciona en columnas con notación de puntos, aquí "meta.status". Ni siquiera muestra los iconos ordenables en el encabezado de la columna, y no ocurre nada, incluso si se hace clic en el encabezado. La ordenación no funciona, independientemente de si loadonce es verdadero o falso.
  • Si trato de buscar (después de configurar loadonce en verdadero) para la columna meta.status (otras columnas sin notación de puntos está bien), arroja un error de javascript como este.

Como regla general para evitar este problema:

  1. Asegúrese de que su name y los valores de index sean los mismos

    name: ''Date'', index: ''Date'', name: ''Clicks'', index: ''Clicks'', ...

  2. Asegúrese de establecer algo así como

    $("#jqGrid").setGridParam({datatype: ''local''});

    Y que cuando recargues la grilla, corriges esto a "JSON" al volver a cargar si lo estás usando, es decir,

    $("#yourGridID").setGridParam({datatype: ''json''}).trigger("reloadGrid");

  3. Por último, asegúrese de usar

    name: ''Date'', index: ''Date'', sortable:true

    Donde lo necesitas