Мне удалось создать Ext.tree.TreePanel, который динамически загружает дочерние узлы, но мне трудно очистить дерево и загрузить в него новые данные. Может ли кто-нибудь помочь мне с кодом сделать это?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я наконец нашел ответ на их форумах. Для всех, кому интересно, это здесь:
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); }
Я не знаю Ext, но предполагаю, что у них есть абстракция DOM, которая может упростить эту задачу. Эквивалент в Prototype будет примерно таким:
tree.root.immediateDescendants().invoke('remove'); // or
tree.root.select('> *').invoke('remove');
Если tree.root не относится к объекту коллекции, а не к корневому узлу DOM дерева, но заимствует имена методов DOM API? Это кажется маловероятным, особенно для современной библиотеки JS.
В моем случае в моем дереве Ext есть скрытый корневой узел типа AsyncTreeNode. Если я хочу очистить дерево и повторно заполнить его с сервера, это довольно просто:
tree.getRootNode().reload();
Из замечательного блога Саки, гуру ExtJS.
while (node.firstChild) {
node.removeChild(node.firstChild);
}
http://blog.extjs.eu/know-how/how-to-remove-all-children-of-a-tree-node/
Я столкнулся с аналогичной проблемой, и решение, которое я придумал, заключалось в том, чтобы «пометить» узел, который не загружался, когда он был свернут, что вынудило его перезагрузить, когда он был повторно развернут.
listeners: {
collapsenode: function(node){
node.loaded = false;
},
В Ext JS 4:
если вы хотите перезагрузить данные панели дерева, вам необходимо перезагрузить хранилище дерева:
getCmp('treeId').getStore().load();
где treeId - идентификатор дерева. Если у вас есть идентификатор магазина, вы можете напрямую использовать load () для идентификатора магазина.
чтобы удалить все дочерние узлы:
getCmp('treeId').getRootNode().removeAll();
Однако удаление дочерних узлов не требуется для перезагрузки узлов дерева из его хранилища.
вы можете просто использовать node.removeAll() для удаления всех дочерних узлов из этого узла.
http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.data.NodeInterface-method-removeAll