gpt4 book ai didi

extjs - 如果节点尚未呈现,如何从 Ext TreePanel 中删除该节点

转载 作者:行者123 更新时间:2023-12-04 06:36:10 28 4
gpt4 key购买 nike

我发现我无法删除尚未渲染的节点。下面的代码显示了我的意思。我在 http://dev.sencha.com/deploy/dev/exa...dow/hello.html 上从 Chrome(和 Firebug 的)命令行运行它(因为该页面已 ext 预加载)

我分别输入每个语句以确保异步操作没有问题(即使树数据在内存中)

Ext.getBody.update('');
// Tree with preloaded nodes in memory
var tree = new Ext.tree.TreePanel({
renderTo: Ext.getBody(),
width: 300,
height: 500,
rootVisible: false,
loader: new Ext.tree.TreeLoader({preloadChildren:true}),
root: new Ext.tree.AsyncTreeNode({
expandend: true,
children: [
{text: 'Folder 1', id: 'folder1', leaf: false, children: [
{text: 'File 1', id: 'file1', leaf: true},
{text: 'File 2', id: 'file2', leaf: true}
]}
]
})
});

// Try to delete 'File 1', notice that the folder has never been expanded
tree.getRootNode().childNodes[0].childNodes[0].remove(true);

// Expand the node and see that 'File 1' is still there
tree.getRootNode().childNodes[0].expand();

// Delete the first child 1 again, it works now that it's been rendered
tree.getRootNode().childNodes[0].childNodes[0].remove(true);

关于该怎么做的任何建议?

答案
var nodeToRemove = tree.getRootNode().childNodes[0].childNodes[0];
if (!nodeToRemove.rendered) {
var children = node.parentNode.attributes.children;
Ext.each(children, function(child, index){
if (child.id == nodeToRemove.id) {
chilren.splice(index, 1);
return false;
}
}) ;
} else {
nodeToRemove.remove(true);
}

最佳答案

Ext.tree.TreePanel 是我最讨厌的一个组件(其次是 FormPanel)。

这是发生的事情:TreeLoader 从其原始配置对象中预加载根节点的子节点,对 AsyncTreeNode.expand 的调用也是如此。 ,这将基本上重置树。

因此,在扩展之前,您必须像这样从 rootNode 的配置中删除节点:

tree.getRootNode().attributes.children[0].children.shift();

编辑:实际上,这更直观:
tree.getRootNode().childNodes[0].attributes.children.shift();

(做同样的事情,因为 root.childNodes[0].attributes === root.attributes.children[0] )

关于extjs - 如果节点尚未呈现,如何从 Ext TreePanel 中删除该节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4854963/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com