要運行在另一視圖(AKA成分)這在很大程度上取決於體系結構的功能。這聽起來像你想在你的父母中運行一個功能。在這種情況下,'封裝正確'方法是從component1派發事件;在組件1的父項中偵聽事件;並從事件監聽器執行該功能。
所以,在headerbar母公司的地方,添加事件偵聽器:
headerbarInstance.addEventListener('parentDoSomething', onHeaderBarToldMeTo);
我在構造函數中如果ActionScript 3的組件,或者如果MXML組件preinitialize事件處理程序可能添加此。在「父」組件也需要監聽功能:
protected function onHeaderBarToldMeTo(event:Event):void{
erase();
}
當點擊在headerbar.mxml的按鈕組件,這觸發關閉headerbar,這就需要調度的情況下,這樣的內部click事件處理程序:
protected function onButtonInheaderbarClick(Event:Event):void{
dispatchEvent(new Event('parentDoSomething'));
}
而且一切都應該神奇地工作。如果該功能不在家長的直接子女內,您可能必須冒泡。
如果你不關心封裝,你也可以直接訪問父節點。所以,你的標題欄組件這樣做:
parent.erase();
它的簡單和直接的,並且應該工作,但被認爲是從維護的立場來看可怕的壞習慣。
謝謝我明白如何做到這一點,如果我只是在另一個視圖中引用functon,但是我忘記提及的是erase()是在我的主appview中實例化的drawArea對象中。所以我需要在另一個視圖中的對象上運行erase()。請參閱我的編輯。那正是我現在想要做的。 – RapsFan1981 2011-06-05 19:56:17
@Casey Wylde如果'erase()'是一個視圖的孩子的公共方法;那麼一旦事件冒起來,而不是擦除「myChild.erase()」。我所說的一切都是真實的。 – JeffryHouser 2011-06-05 20:03:05
您也可以使用FlexGlobals.topLevelApplication訪問頂級應用程序並以此方式調用該函數;但是從封裝的角度來看它也被認爲是不好的,因爲它提供了對組件的外部依賴。 – JeffryHouser 2011-06-05 20:04:53