2009-02-18 32 views
1

我有一種將XML節點結構添加到當前選定的樹節點的方法。以編程方式在Flex樹控件中引發更改事件

這附加xml,並打開父節點以顯示新添加的節點。

然後,我通過設置樹的selectedItem來選擇節點。

我有一個編輯窗體,更新樹更改事件的值。當我在這個方法中設置selectedItem時,節點被正確選擇,但是改變事件永遠不會觸發(因此編輯器不會更新)。我試圖在以後的通話中稱它爲無效。

有沒有一種方法可以強制樹在這一點上發送更改事件?

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

您可以移動當前在您的change事件處理到一個單獨的功能邏輯,然後直接調用該函數:

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(); 
} 
2

有沒有一種方法可以強制樹在此時發送更改事件?

使用dispatchEvent()方法。謝謝詹姆斯!

+0

它實際上是dispatchEvent()方法;) – 2009-02-18 09:09:25

+0

好,謝謝詹姆斯。 – dirkgently 2009-02-18 09:15:38

相關問題