我有一個名爲shopView的自定義組件,它是一個MXML skinnable組件。我有一個名爲ShopController的控制器類,它負責在彈出窗口中顯示此組件,並更新組件中顯示的信息等。flex 4 - 爲什麼dispatchEvent觸發creationComplete遞歸
現在,我想在從控制器創建ShopView之後創建一些子組件的子組件後ShopView創建(creationComplete()事件)
所以,我已附加一個事件監聽器,實習生做一些初始化處理
creationComplete="init(event)"
的init()函數
private function init(event:FlexEvent):void{
event.stopImmediatePropagation();
initMenus();
initSlots();
dispatchEvent(event);
}
從控制器類
_shop.addEventListener(FlexEvent.CREATION_COMPLETE,onShopCreated);
* _shop附另一個創建完整的事件是ShopView *
的情況下現在,如果你看到的init()函數,有我停止事件傳播,做一些初始化過程,之後我派遣事件(對於店鋪控制者做剩下的工作)
現在,這個我因爲ShopView的crationComplete事件被遞歸調用,所以會崩潰應用程序。我在想dispatchEvent會傳播給其他人,但好像它正在傳播回同一個組件。
我已經通過從init()函數中刪除e.stopImmediatePropagation()和dispatchEvent(event)行來修復它。但我想知道爲什麼會發生這種情況?
這是mxml/flex組件的已知問題嗎?或者它是預期的行爲?
更新:我沒有在.as中做同樣的事情,如下所述。得到的答案,基本上它我的愚蠢:)
,因爲我的時候我寫的。至於班,我 stopevent傳播和調度基於業務邏輯的事件還沒有看到這種行爲。
在此先感謝。
你已經基本上創建了一個循環,它會繼續嘗試初始化你的應用程序。我同意takteek,你不應該停下來,然後重新創建完成。在你點擊init()時你的組件應該被添加到視圖堆棧中,所以在它上面設置屬性應該可以正常工作。 – Jeremy 2012-03-01 08:47:22
基本上,在您刪除前面提到的代碼之前,您正在調度相同的事件,來自偵聽該事件的相同組件,以及來自剛纔由相同事件觸發的相同功能。因此無限循環。 – Jeremy 2012-03-01 08:51:59