Как очистить дерево в ExtJ?

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
0
19 340
7

Ответы 7

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

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

Другие вопросы по теме