我發現我無法刪除尚未呈現的節點。以下代碼顯示了我的意思。我從Chrome的(和Firebug的)命令行運行它,而在http://dev.sencha.com/deploy/dev/exa...dow/hello.html(因爲該頁面已經預加載)如何從Ext TreePanel中刪除節點(如果該節點尚未呈現)
我分別鍵入每個語句以確保異步操作沒有問題(即使樹數據處於內存)
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);
任何建議怎麼做?
ANSWER
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);
}
爲什麼包含節點,如果你想刪除它們呢? – Chandu 2011-01-31 19:14:07
@Cybermate:這顯然不是實際使用的代碼,它只是一個縮減。樹是數據的一個視圖,代碼中的其他位置可能會在樹的「文件夾」展開之前刪除「文件」。 – 2011-01-31 19:20:49