2011-02-11 44 views
0

我有一個帶節點的樹和一個刪除按鈕,第一個用戶選擇節點並點擊這個刪除按鈕,我想從樹中刪除這個節點,它不是XML,樹中的每個節點都是對象類型 ​​從flex Tree組件刪除Object類型的節點?

我試圖delete myTree.selectedItem(但編譯器不會讓我這樣做) 還試圖myTree.selectedItem = nul L(剛取消選擇的項目) ,也是我如何可以訪問參考myTree.selectedItem的父對象?

+0

請問您可以添加一個代碼示例嗎? – www0z0k 2011-02-11 23:13:48

回答

0

以下是使用dataDescriptor移除葉節點與MX Tree的方法。

var parent:Object = tree.getParentItem(tree.selectedItem); 
var p:int = tree.itemRendererToIndex(tree.itemToItemRenderer(parent)) 
var i:int = tree.itemRendererToIndex(tree.itemToItemRenderer(tree.selectedItem))  
tree.dataDescriptor.removeChildAt(parent,tree.selectedItem,i - p - 1); 
0

您可以使用此爲您去除功能:

private function removeEmployee():void { 
var node:XML = XML(tree.selectedItem); 
if(node == null) return;  
var children:XMLList = XMLList(node.parent()).children(); 
for(var i:Number=0; i < children.length(); i++) { 
    if(children[i][email protected] == [email protected]) { 
     delete children[i]; 
    } 
} 
} 
+0

鑄造對象爲xml不會工作(在我的例子中,selectedItem是Object類型的) – 2011-02-13 08:59:56

1

如果沒有這將是十分困難的父節點引用。我會建議創建一個TreeNode類,而不是一個香草對象。除了「label」和「children」屬性外,當爲樹創建模型時,給節點一個「父」屬性並設置父項。

然後,當你選擇和項目,然後點擊刪除按鈕,你可以得到所選節點的父節點,並調用一個「removeChild」等等。這應該刪除給定的孩子節點。

這可能是因爲您需要在刪除節點後使樹的模型無效。您可以這樣做:

myTree.invalidateList(); 
+0

我理解第一部分,但不是第二部分,我們需要removeChild爲什麼?而不是對dataprovider進行更改? – 2011-02-13 09:04:47

1
var item:* = tree.selectedItem; 
var parent:* = tree.getParentItem(item); 

var p:int = tree.getItemIndex(parent); 
var i:int = tree.getItemIndex(item); 
var index:int = i - p - 1; 

tree.dataDescriptor.removeChildAt(parent, item, index); 

Almoust相同,但它爲我好。