Es ist mir gelungen, eine Ext.tree.TreePanel zu erstellen, die Kindknoten dynamisch lädt, aber ich habe Schwierigkeiten, die Baumstruktur zu löschen und sie mit neuen Daten zu laden. Kann mir jemand mit dem Code helfen?Wie löscht man einen Baum in ExtJs?
Antwort
Ich fand endlich eine Antwort in ihren Foren. Für alle Interessierten ist es hier:
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); }
ich nicht Ext weiß, aber ich vermute, dass sie DOM Abstraktion, die das leichter machen könnte. Ein Äquivalent in Prototype wäre so etwas wie sein:
tree.root.immediateDescendants().invoke('remove'); // or
tree.root.select('> *').invoke('remove');
Sofern tree.root
bezieht sich auf ein Sammelobjekt, anstatt die Wurzel DOM-Knoten des Baumes, sondern leiht DOM API Methodennamen? Das erscheint besonders unwahrscheinlich für eine moderne JS-Bibliothek.
In meinem Fall hat meine Ext-Struktur einen versteckten Wurzelknoten vom Typ AsyncTreeNode. Wenn ich den Baum und repopulate vom Server gelöscht werden soll, dann ist es ziemlich einfach:
tree.getRootNode().reload();
Vom wunderbaren Blog von Saki ein ExtJS Guru.
while (node.firstChild) {
node.removeChild(node.firstChild);
}
http://blog.extjs.eu/know-how/how-to-remove-all-children-of-a-tree-node/
I lief in ein ähnliches Problem und die Lösung kam ich mit war der Knoten zu ‚Tag‘ nicht geladen ist zu haben, wenn es damit zusammengebrochen war ein Neuladen zwingen, wenn es wurde wieder ausgebaut .
listeners: {
collapsenode: function(node){
node.loaded = false;
},
In Ext JS 4:
wenn Sie die Daten des Baumes Platte neu zu laden möchten, können Sie den Baum Speicher neu zu laden müssen:
getCmp('treeId').getStore().load();
wo treeID die ID der ist Baum. Wenn Sie eine Geschäfts-ID haben, können Sie direkt load() für die Geschäfts-ID verwenden.
alle untergeordneten Knoten zu entfernen:
getCmp('treeId').getRootNode().removeAll();
jedoch Knoten Kind Entfernen zum Nachladen des Baumknoten aus seinem Speicher nicht erforderlich ist.
können Sie einfach node.removeAll()
verwenden, um alle untergeordneten Knoten von diesem Knoten zu entfernen.
http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.data.NodeInterface-method-removeAll