2013-03-22 19 views
0

我覺得可以訪問內部組件的方式比我所知道的要好。 我知道我們可以訪問任何內部組件類似: FlexGlobals.topLevelApplication.someChild1.someChild2.someChild3 ...等等從flexGlobals.topLevelApplication獲取內部組件

我已經擁有父組件層次數的部件。我想知道是否可以無論如何都可以訪問最後一個孩子,而無需提及其父母。

我需要觸發該組件上的事件。

FlexGlobals.topLevelApplication.child1.child2.child3.dispatchEvent(new Event('clearData', true)); 

更新:我想我已經添加子組件的事件監聽器,並嘗試從一個動作腳本文件,它派遣你點建議1的方式,但它去unheared \

child3.addEventLisener('clearData', clearHandler); 

然後我分派該事件的一些事情,如:

dispatchEvent(new Event(modelApp.CLEAR_PALETTE, true) 

回答

0

我從如何理解問題沒有使用應用程序設計的良好原則,但那是另一回事題。
就你而言,你可以使用舞臺作爲氣泡事件的全局currentTarget。來自displayObject且使用bubbles = true的調度事件;在目標顯示對象中監聽階段對象帶/不帶捕獲階段的事件。

在任何DisplayObject:

dispatchEvent(new Event("myEvent", true)); 

在目標displayObject的:

// add ADDED_TO_STAGE event listener in constructor or when component creation complete 
protected function component_creationCompleteHandler(event:FlexEvent):void 
{ 
    addEventListener(Event.ADDED_TO_STAGE, onAddToStage); 
} 

.. 

protected function onAddToStage(event:Event):void 
{ 
    stage.addEventListener("myEvent", eventHandler, true); 
} 

protected function eventHandler(event:Event):void 
{ 
    trace("eventHandler"); 
} 

它比使用參考更好FlexGlobals對象。代碼更靈活。

0

我想你應該再往上初始化組件使用addEventListener的水平。 並從任何你想要的地方派遣。

另一種方法是做到這一點,您需要將組件引用(ID)保存在creationComplete對象中。保存它的模型。現在,您可以隨時隨地訪問它。並做你想做的事。

我也這樣做了,我保存我的屏幕組件refrence在一個數組中,並訪問它,我需要動態驗證所有組件。

否則你需要嵌套循環來獲得你需要的孩子。

1

嘗試添加

FlexGlobals.topLevelApplication.systemManger.addEventLisener('clearData', clearHandler); 

在child3

,並從任何你想要dispacthed它,

派遣使用以下

FlexGlobals.topLevelApplication.systemManager.dispatchEvent(new Event(modelApp.CLEAR_PALETTE, true)