我有一个带有节点的树,一个删除按钮,第一个用户选择节点并单击此删除按钮,我希望从树中删除此节点,它不是XML,树中的每个节点都是Object类型
{label:'folder',children:[{label:'file1'}]}
我试过delete myTree.selectedItem
(但编译器不会让我这样做)
还试过myTree.selectedItem = nul
l(只是取消选择项目)
以及如何访问myTree.selectedItem的父对象的引用?
答案 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);