jqgrid methods
jqGrid: subgrid no se llena con datos (1)
Tengo una subred que, cuando haces clic en el signo "+" al lado de "Queso", la consulta de Ajax se activa y veo los nombres de las columnas de la sub-red, pero los datos reales no se incluyen en la sub-cuadrícula. El problema ocurre independientemente de qué cuadrícula intente expandir, pero el ejemplo de "Queso" es el que se muestra a continuación.
Puede ver la respuesta XML en la parte inferior de la salida FireBug en la captura de pantalla. He leído ese XML y parece válido. En una corazonada, también pegué el resultado XML en esta página , y parece sangrar muy bien. Además de eso, también hice que la llamada ajax devolviera algunos valores muy básicos, y no importa lo que haya intentado hasta ahora, la grilla permanece vacía.
Lo que debería ver en la subred es:
------------------------------------------------------
|Translations | Language | Active |
------------------------------------------------------
| It''s cheesy goodness | EN | No |
| fromage | FR | No |
| | DE | N/A | <-- "N/A" means there''s no translation of "cheese" in German, currently in the database
... etc., with all supported languages listed.
El código para la subred es:
$("#translationsList").jqGrid({
caption : "Translations",
datatype : "xml",
url : translationsFeed,
editurl : translationsEdit,
mtype : "get",
pager : "#translationsPager",
rowNum : 20,
autowidth : true,
sortname : "phrase",
sortorder : "asc",
viewrecords : true,
multiselect : false,
hidegrid : false,
height : 300,
altRows : true,
rownumbers : true,
toolbar : [false],
colNames : ["phrase_id", "translation_id", "language_cd", "Phrase", "Translation", "Created", "Modified", "Active"],
colModel : [
{ name : "phrase_id", index : "phrase_id", sortable : true, search : false, editable : true, edittype : "text", editrules: { edithidden :true }, hidden : true},
{ name : "translation_id", index : "translation_id", sortable : false, search : false, editable : true, edittype : "text", editrules: { edithidden :true }, hidden : true},
{ name : "language_cd", index : "language_cd", sortable : true, search : true, editable : true, edittype : "text", editrules: { edithidden: true, required : true }, hidden : true },
{ name : "Phrase", width:200, index : "phrase", sortable : true, search : true, editable : true, edittype : "text", editrules: { required : true } },
{ name : "Translation", width:200, index : "translation", sortable : true, search : true, editable : true, edittype : "text", editrules: { required : false } },
{ name : "Created", width:100, index : "modify_dt", sortable : true, search : true },
{ name : "Modified", width:100, index : "create_dt", sortable : true, search : true },
{ name : "Active", width:20, index : "active", sortable : true, search : true, editable : true, edittype : "select", editoptions:{value:"0:No;1:Yes"} }
],
onSelectRow: function(id) {
jQuery(''#translationsList'').editRow(id, true);
},
subGrid: true,
subGridUrl: ''ajax/translations_subgrid_feed.php'',
subgridtype: ''xml'',
subGridModel : [{
name : [''Translations'', ''Language'', ''Active''],
width : [583, 70, 80],
align : [''left'',''right'',''right''],
params : [''phrase_id'']
}],
subGridOptions: {
plusicon : "ui-icon-plus",
minusicon : "ui-icon-minus",
openicon: "ui-icon-carat-1-sw",
expandOnLoad: true,
selectOnExpand : false,
reloadOnExpand : true
}
});
La respuesta XML para las subredes principales se puede encontrar en este Gist
Pude reproducir el problema y analicé el código del módulo de subgrid de jqGrid. Mi explicación es: la nueva propiedad expandOnLoad: true
de subGridOptions que utiliza puede funcionar solo en el caso de un tipo de datos ''local'' en la grilla principal . No encuentro el comentario correspondiente sobre esto en la documentación, pero es así.
En la versión 4.1 se usa la opción delayOnLoad
, pero no funcionaba correctamente. En la versión 4.1.1, después de la corrección, la opción no se usa e inmediatamente después de agregar una fila en la grilla principal. El problema es que jqGrid usa la propiedad .grid.hDiv.loading
para omitir la solicitud ajax si la respuesta de la solicitud ajax anterior no se procesa hasta el final. Dentro del controlador beforeSend
de la solicitud $.ajax
de la grilla principal (ver aquí ) se llamará beginReq () cuál es la primera línea
ts.grid.hDiv.loading = true;
luego dentro del controlador de éxito de la solicitud $.ajax
llamará al método addXmlData , que llama a addSubGrid para cada fila de la grilla principal, que llama a .trigger (''clic''); en el ícono "expandir" de la fila de la grilla. Como resultado, se llamará a populatesubgrid en todas las filas de la grilla antes de que la .grid.hDiv.loading
se redireccione a false
dentro de endReq al final del controlador de success
. Por lo tanto, en la parte correspondiente del método populatesubgrid donde se ts.grid.hDiv.loading
se ts.grid.hDiv.loading
la llamada $.ajax
correspondiente y las filas no se expandirán .
Entonces puedo repetir el resultado corto de mis análisis: no use la opción expandOnLoad: true
. No es trabajo en datos remotos.