2009-02-18 3 views
1

У меня есть способ добавить структуру узла XML к текущему выбранному узлу дерева.Управлять событием изменения в элементе управления гибким деревом программно

Это добавляет xml и открывает родительский узел для отображения недавно добавленного узла.

Затем я выбираю узел, задавая выбранный элемент дерева.

У меня есть форма редактирования, которая обновляет его значения в событии изменения дерева. Когда я устанавливаю выбранный элемент в этом методе, узел выбирается правильно, но событие изменения никогда не срабатывает (поэтому редактор не обновляет). Я попытался позвонить ему в блок позже, но не помогло.

Есть ли способ, которым я могу заставить дерево отправить событие изменения в этот момент?

public function addSelected(node:XML):void{ 

      tree_expandItem(false);    

      var selectedItem:XML = tree.selectedItem as XML; 

      selectedItem.appendChild(node); 

      tree_expandItem(true); 

      callLater(function():void { tree.selectedItem = node; }); 

     } 

Чтобы продлить этот вопрос в общем виде пути - я бы подумал, что изменение SelectedItem дерева приведет к событию изменения так или иначе? Или изменение считается только изменением, если пользователь делает это?

ответ

3

Вы можете переместить логику, которая в настоящее время в вашем изменение обработчика событий в отдельную функцию, а затем вызвать эту функцию непосредственно:

private function changeHandler(event:ListEvent):void 
{ 
    doChangeLogic(); 
} 

private function doChangeLogic():void 
{ 
    //statements 
} 

public function addSelected(node:XML):void 
{ 
    tree_expandItem(false);       

    var selectedItem:XML = tree.selectedItem as XML; 

    selectedItem.appendChild(node); 

    tree_expandItem(true); 

    callLater(function():void { tree.selectedItem = node; }); 

    doChangeLogic(); 
} 
+0

Да, это сработает наверняка .. глупо меня .. ищет сложный ответ на простой вопрос .. –

+0

Awesome! Рад, что смог помочь! –

2

Есть ли способ, которым я могу заставить дерево отправить событие изменения в этот момент?

Используйте метод dispatchEvent(). Спасибо Джеймсу!

+0

это на самом деле метод dispatchEvent();) –

+0

справа, спасибо Джеймс. – dirkgently

+0

Это тоже сработает, спасибо –

Смежные вопросы