7

我设法创建了一个动态加载子节点的Ext.tree.TreePanel,但是我很难清除树并用新数据加载它。有人可以帮我写代码吗?

4

7 回答 7

6

来自 ExtJS 大师 Saki 的精彩博客。

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

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

于 2009-03-16T09:58:08.107 回答
4

在 Ext JS 4 中:

如果要重新加载树面板的数据,则需要重新加载树存储:

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

其中 treeId 是树的 id。如果您有商店 id,您可以直接在商店 id 上使用 load()。

删除所有子节点:

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

但是,从其存储区重新加载树节点不需要删除子节点。

于 2011-07-04T14:51:15.463 回答
3

在我的例子中,我的 Ext 树有一个 AsyncTreeNode 类型的隐藏根节点。如果我想清除树并从服务器重新填充,这很简单:

tree.getRootNode().reload();
于 2008-10-11T22:16:29.893 回答
1

我终于在他们的论坛上找到了答案。对于任何有兴趣的人来说,这里是:

if (tree)
{
    var delNode;
    while (delNode = tree.root.childNodes[0])
        tree.root.removeChild(delNode);
}
于 2008-10-11T02:25:37.083 回答
1

您可以简单地使用node.removeAll()从该节点中删除所有子节点。

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

于 2013-06-28T02:10:11.273 回答
0

我遇到了类似的问题,我想出的解决方案是“标记”节点在折叠时尚未加载,从而在重新展开时强制重新加载。

listeners: {
   collapsenode: function(node){
   node.loaded = false;
},
于 2009-09-11T18:51:26.163 回答
-1
if (tree) { var delNode; while (delNode = tree.root.childNodes[0]) tree.root.removeChild(delNode); }

I don't know Ext, but I'm guessing that they have DOM abstraction that might make that easier. An equivalent in Prototype would be something like:

tree.root.immediateDescendants().invoke('remove'); // or
tree.root.select('> *').invoke('remove');

Unless tree.root refers to a collection object rather than the tree's root DOM node, but is borrowing DOM API method names? That seems really unlikely, especially for a modern JS library.

于 2008-10-11T05:13:41.517 回答