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