Как очистить дерево в ExtJs? - PullRequest
7 голосов
/ 11 октября 2008

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

Ответы [ 7 ]

6 голосов
/ 16 марта 2009

Из замечательного блога Саки и гуру ExtJS.

while (node.firstChild) {
    node.removeChild(node.firstChild);
}

http://blog.extjs.eu/know-how/how-to-remove-all-children-of-a-tree-node/

4 голосов
/ 04 июля 2011

In Ext JS 4:

Если вы хотите перезагрузить данные панели дерева, вам необходимо перезагрузить хранилище дерева:

getCmp('treeId').getStore().load();

где treeId - это идентификатор дерева. Если у вас есть идентификатор магазина, вы можете напрямую использовать load () для идентификатора магазина.

чтобы удалить все дочерние узлы:

getCmp('treeId').getRootNode().removeAll();

Однако удаление дочерних узлов не требуется для перезагрузки узлов дерева из его хранилища.

3 голосов
/ 12 октября 2008

В моем случае у моего дерева Ext есть скрытый корневой узел типа AsyncTreeNode. Если я хочу очистить дерево и снова заполнить его с сервера, это довольно просто:

tree.getRootNode().reload();
1 голос
/ 28 июня 2013

Вы можете просто использовать node.removeAll(), чтобы удалить все дочерние узлы из этого узла.

http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.data.NodeInterface-method-removeAll

1 голос
/ 11 октября 2008

Я наконец нашел ответ на их форумах. Для всех, кто интересуется именно здесь:

if (tree)
{
    var delNode;
    while (delNode = tree.root.childNodes[0])
        tree.root.removeChild(delNode);
}
0 голосов
/ 11 сентября 2009

Я столкнулся с подобной проблемой, и решение, которое я нашел, состояло в том, чтобы «пометить» узел, который не был загружен, когда он был свернут, что вызвало перезагрузку при повторном расширении.

listeners: {
   collapsenode: function(node){
   node.loaded = false;
},
0 голосов
/ 11 октября 2008
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 дерева, но заимствует ли имена методов API DOM? Это кажется маловероятным, особенно для современной библиотеки JS.

...