从flex Tree组件中删除Object类型的节点?

时间:2011-02-11 21:45:25

标签: actionscript-3 flex tree treeview

我有一个带有节点的树,一个删除按钮,第一个用户选择节点并单击此删除按钮,我希望从树中删除此节点,它不是XML,树中的每个节点都是Object类型 {label:'folder',children:[{label:'file1'}]}

我试过delete myTree.selectedItem(但编译器不会让我这样做) 还试过myTree.selectedItem = nul l(只是取消选择项目) 以及如何访问myTree.selectedItem的父对象的引用?

4 个答案:

答案 0 :(得分:1)

如果没有父节点引用,这将非常困难。我建议创建一个类TreeNode,而不是一个vanilla对象。除了“label”和“children”属性之外,为节点提供“父”属性,并在为树创建模型时设置父级。

然后,当您选择并选择项目并单击删除按钮时,您可以获取所选节点的父节点并调用“removeChild”等。然后应该删除给定的子节点。

删除节点后,您可能需要使树模型无效。你可以这样做:

myTree.invalidateList();

答案 1 :(得分: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);

虽然相同,但对我来说效果更好。

答案 2 :(得分: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].@name == node.@name ) {
       delete children[i];
  }
 }
}

答案 3 :(得分: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);