2011-02-11 45 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相同,但它为我好。