J'ai réussi à créer un Ext.tree.TreePanel qui charge dynamiquement des nœuds enfants, mais j'ai du mal à vider l'arborescence et à la charger avec de nouvelles données. Quelqu'un peut-il m'aider avec le code pour le faire?Comment effacer un arbre dans ExtJs?
Répondre
J'ai enfin trouvé une réponse dans leurs forums. Pour les personnes intéressées, il est ici:
if (tree)
{
var delNode;
while (delNode = tree.root.childNodes[0])
tree.root.removeChild(delNode);
}
if (tree) { var delNode; while (delNode = tree.root.childNodes[0]) tree.root.removeChild(delNode); }
Je ne sais pas Ext, mais je devine qu'ils ont l'abstraction DOM qui pourrait rendre cela plus facile. Un équivalent prototype serait quelque chose comme:
tree.root.immediateDescendants().invoke('remove'); // or
tree.root.select('> *').invoke('remove');
À moins tree.root
fait référence à un objet de collection plutôt que le nœud DOM racine de l'arbre, mais emprunte les noms de méthode API DOM? Cela semble vraiment improbable, surtout pour une bibliothèque JS moderne.
Dans mon cas, mon arbre Ext a un nœud racine caché de type AsyncTreeNode. Si je veux effacer l'arbre et repeupler à partir du serveur, il est assez simple:
tree.getRootNode().reload();
Depuis le merveilleux blog de Saki un gourou ExtJS.
while (node.firstChild) {
node.removeChild(node.firstChild);
}
http://blog.extjs.eu/know-how/how-to-remove-all-children-of-a-tree-node/
je suis tombé sur un problème similaire et la solution que je suis venu avec était de « tag » le noeud a avoir pas chargé quand il a été effondré forçant ainsi un reload quand il a été augmenté de nouveau .
listeners: {
collapsenode: function(node){
node.loaded = false;
},
Ext JS 4:
si vous voulez recharger les données du panneau de l'arborescence, vous devez recharger le magasin d'arbre:
getCmp('treeId').getStore().load();
où ArbreID est l'identifiant du arbre. Si vous avez un identifiant de magasin, vous pouvez directement utiliser load() sur l'identifiant du magasin.
pour supprimer tous les nœuds enfants:
getCmp('treeId').getRootNode().removeAll();
Toutefois, la suppression des nœuds enfants n'est pas nécessaire pour recharger les nœuds de l'arbre de son magasin.
Vous pouvez simplement utiliser node.removeAll()
pour supprimer tous les nœuds enfants de ce nœud.
http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.data.NodeInterface-method-removeAll