jqGrid treeGrid catch expand collaps events

Yo uso jqGrid para crear un árbol grande. Ahora quiero recordar los nodos expandidos y colapsados ​​en las cookies

Así que quiero atrapar el evento de expandir y colapsar. No pude encontrarlo en el manual

Así que lo resolví de esta manera

grid.find("div.treeclick").bind("click",function(e){ classes = $(this).attr('class'); //returns: //ui-icon treeclick ui-icon-triangle-1-s tree-minus //ui-icon treeclick ui-icon-triangle-1-e tree-plus if(classes.indexOf('-minus') != -1) alert ('Expand!'); else if(classes.indexOf('-plus') != -1) alert ('Collaps!') }); 

¿Alguien podría proponer otro camino?

Actualmente no hay ningún evento o callback en jqGrid que pueda ayudarlo a detectar colapso o expansión de los nodos de árbol.

En general, el código que publicaste hace las pruebas correctas. Sin embargo, usted no está satisfecho con la solución. Encuentro que tampoco es tan bueno. El mayor problema que veo es que prueba qué ícono tiene el botón, pero el ícono será cambiado por el manejador original de los mismos eventos en la grilla. El orden de los enlaces debe ser muy importante.

En su lugar, prefiero utilizar la técnica de subclases en tales casos cuando no existe ningún evento. Es muy fácil, pero es 100% efectivo.

Tree Grid tiene los métodos expandNode y collapseNode que están documentados. El método será llamado internamente por jqGrid también en caso de clics en el icono del nodo. El método expandNode llama a reloadGrid para mostrar el árbol expandido.

Por lo tanto, sugiero que agregue el siguiente código después de que se haya creado Tree Grid:

 var orgExpandNode = $.fn.jqGrid.expandNode, orgCollapseNode = $.fn.jqGrid.collapseNode; $.jgrid.extend({ expandNode: function (rc) { alert('before expandNode: rowid="' + rc._id_ + '", name="' + rc.name + '"'); return orgExpandNode.call(this, rc); }, collapseNode: function (rc) { alert('before collapseNode: rowid="' + rc._id_ + '", name="' + rc.name + '"'); return orgCollapseNode.call(this, rc); } }); 

Puedes ver los resultados en la demostración .

ACTUALIZADO: jqGrid gratuito admite devoluciones de llamadas y eventos, lo que hace innecesaria la sobrescritura anterior de expandNode y collapseNode . Es compatible con devoluciones de llamada adicionales llamadas antes o después de expandir o contraer nodos o filas. Los nombres de las devoluciones de llamada: treeGridBeforeExpandNode , treeGridAfterExpandNode , treeGridBeforeCollapseNode , treeGridAfterCollapseNode , treeGridBeforeExpandRow , treeGridAfterExpandRow , treeGridBeforeCollapseRow , treeGridAfterCollapseRow y las correspondientes jQuery Eventos jqGridTreeGridBeforeExpandNode , jqGridTreeGridAfterExpandNode , jqGridTreeGridBeforeCollapseNode , jqGridTreeGridAfterCollapseNode , jqGridTreeGridBeforeExpandRow , jqGridTreeGridAfterExpandRow , jqGridTreeGridBeforeCollapseRow , jqGridTreeGridAfterCollapseRow . Todas las devoluciones de llamada tienen un parámetro: options , que tiene dos propiedades: rowid y item . El item es el nodo, que se expandirá / colapsará.