javascript - modern - ¿Cómo se limpia un árbol en ExtJs?
sencha examples 6 (7)
He logrado crear un Ext.tree.TreePanel que carga los nodos secundarios dinámicamente, pero me está resultando difícil borrar el árbol y cargarlo con nuevos datos. ¿Alguien puede ayudarme con el código para hacer esto?
if (tree) { var delNode; while (delNode = tree.root.childNodes[0]) tree.root.removeChild(delNode); }
No sé Ext, pero supongo que tienen abstracción DOM que podría hacer eso más fácil. Un equivalente en Prototype sería algo así como:
tree.root.immediateDescendants().invoke(''remove''); // or
tree.root.select(''> *'').invoke(''remove'');
A menos que tree.root
refiera a un objeto de colección en lugar del nodo DOM raíz del árbol, ¿pero toma prestados los nombres de los métodos DOM API? Eso parece poco probable, especialmente para una biblioteca JS moderna.
En mi caso, mi árbol Ext tiene un nodo raíz oculto de tipo AsyncTreeNode. Si quiero borrar el árbol y volver a llenar el servidor, es bastante simple:
tree.getRootNode().reload();
Me encontré con un problema similar y la solución que se me ocurrió fue ''etiquetar'' el nodo que no se había cargado cuando se colapsó forzando una recarga cuando se volvió a expandir.
listeners: {
collapsenode: function(node){
node.loaded = false;
},
En Ext JS 4:
si desea volver a cargar los datos del panel de árbol, necesita volver a cargar el almacén de árbol:
getCmp(''treeId'').getStore().load();
donde treeId es la identificación del árbol. Si tiene una identificación de tienda, puede usar load () directamente en la identificación de la tienda.
para eliminar todos los nodos secundarios:
getCmp(''treeId'').getRootNode().removeAll();
Sin embargo, la eliminación de nodos secundarios no es necesaria para volver a cargar los nodos de árbol de su tienda.
Finalmente encontré una respuesta en sus foros. Para cualquier persona interesada está aquí:
if (tree)
{
var delNode;
while (delNode = tree.root.childNodes[0])
tree.root.removeChild(delNode);
}
Del maravilloso blog de Saki, un gurú de ExtJS.
while (node.firstChild) {
node.removeChild(node.firstChild);
}
http://blog.extjs.eu/know-how/how-to-remove-all-children-of-a-tree-node/
simplemente puede usar node.removeAll()
para eliminar todos los nodos secundarios de este nodo.
http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.data.NodeInterface-method-removeAll