Мне удалось создать Ext.tree.TreePanel, который динамически загружает дочерние узлы, но мне сложно сбрасывать дерево и загружать его новыми данными. Может ли кто-нибудь помочь мне с кодом для этого?Как вы удаляете дерево в ExtJs?
ответ
Наконец-то я нашел ответ на их форумах. Для тех, кто заинтересован именно здесь:
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