Удалить узел типа Object из компонента Flex? - PullRequest
0 голосов
/ 12 февраля 2011

У меня есть дерево с узлами и кнопка удаления, сначала пользователь выбирает узел и нажимает эту кнопку удаления, я хочу, чтобы этот узел был удален из дерева, это не XML, каждый узел в дереве имеет тип Object {label:'folder',children:[{label:'file1'}]}

Я пытался delete myTree.selectedItem (но компилятор не позволил мне это сделать) также пытался myTree.selectedItem = nul l (просто отменяет выбор элемента), а также как я могу получить доступ к ссылке на родительский объект myTree.selectedItem?

Ответы [ 4 ]

1 голос
/ 11 сентября 2012
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);

То же самое, но у меня это работает лучше.

1 голос
/ 12 февраля 2011

Без ссылки на родительский узел это будет довольно сложно.Я бы предложил создать класс TreeNode или около того вместо ванильного объекта.Помимо свойства "label" и "children", присвойте узлу свойство "parent" и установите родительский элемент при создании модели для дерева.

Затем при выборе и элементе и нажатии кнопки удаленияВы можете получить родительский узел выбранного узла и вызвать «removeChild» или так далее.Это должно затем удалить данный дочерний узел.

Возможно, вам потребуется аннулировать модель дерева после удаления узла.Вы можете сделать это с:

myTree.invalidateList();
0 голосов
/ 27 июля 2011

Вот способ удалить листовые узлы в дереве MX с помощью dataDescriptor.

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 голосов
/ 12 февраля 2011

Вы можете использовать это как функцию удаления:

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];
  }
 }
}
...