我已经成功创建了一个动���加载子节点的 Ext.tree.TreePanel,但是我很难清空树并加载新数据。 有人可以帮我编写代码吗?
来自ExtJS大师Saki的精彩博客。
while (node.firstChild) {
node.removeChild(node.firstChild);
}
http://blog.extjs.eu/know-how/how-to-remove-all-children-of-a-tree-node/
getCmp('treeId').getStore().load();
其中treeId是树的ID。如果您有一个存储ID,可以直接在存储ID上使用load()。
要删除所有子节点:
getCmp('treeId').getRootNode().removeAll();
在我的情况下,我的Ext tree有一个隐藏的根节点类型为AsyncTreeNode。如果我想要清除树并从服务器重新填充,这很简单:
tree.getRootNode().reload();
node.removeAll()
从此节点中删除所有子节点。
http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.data.NodeInterface-method-removeAll
我终于在他们的论坛中找到了答案。对于任何感兴趣的人,这里是:
if (tree)
{
var delNode;
while (delNode = tree.root.childNodes[0])
tree.root.removeChild(delNode);
}
listeners: {
collapsenode: function(node){
node.loaded = false;
},
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库。