你如何清除ExtJs中的树?

时间:2008-10-11 01:31:02

标签: javascript extjs extjs3

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

7 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:4)

在Ext JS 4中:

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

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

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

删除所有子节点:

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

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

答案 2 :(得分:3)

就我而言,我的Ext树有一个隐藏的AsyncTreeNode类型的根节点。如果我想清除树并从服务器重新填充,那很简单:

tree.getRootNode().reload();

答案 3 :(得分:1)

我终于在论坛上找到了答案。对于任何感兴趣的人都在这里:

if (tree)
{
    var delNode;
    while (delNode = tree.root.childNodes[0])
        tree.root.removeChild(delNode);
}

答案 4 :(得分:1)

您只需使用node.removeAll()从此节点中删除所有子节点。

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

答案 5 :(得分:0)

我遇到了类似的问题,我想出的解决方案就是'标记'节点在折叠时没有加载,从而在重新扩展时强制重新加载。

listeners: {
   collapsenode: function(node){
   node.loaded = false;
},

答案 6 :(得分:-1)

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库。