2012-04-26 72 views
0

Flex 4中有一種方法設計一個皮膚,以便它可以監聽由我的主應用程序調度的事件,在這種情況下,它是<s:WindowedApplication>課?Flex 4事件監聽器在主要應用程序事件的皮膚

我試着在皮膚中爲contentGroup添加事件監聽器,只是爲了踢腿。毫不奇怪,它沒有奏效。

任何想法?

謝謝你的時間。

回答

4

你想設計一個皮膚的組件?

如果您正在爲WindowedApplication設計一個外觀,並且想要監聽WindowedApplication類觸發的事件;好的。您可以使用外觀中的hostComponent變量來偵聽WindowedApplication實例上的所述事件。

我相信hostComponent屬性是基於皮膚元數據自動創建的;除非你創建一個移動皮膚,然後文檔告訴你手動創建它。從概念上講是這樣的:

public var hostComponent : WindowedApplication; 

在代碼中的未來的某個時刻:

hostComponent.addEventListener('myCustomEvent',myEventListener); 

我不知道在設置點什麼在Flex組件生命週期中的hostComponent屬性。我相信你可以在creationComplete事件期間添加事件監聽器而不是事件;但也許在生命週期的更早期。

如果這不是你想要做的,你可以聽在你的代碼的任何地方的主要應用程序事件是什麼 - 包括護膚類 - 通過引用FlexGlobals.topLevelApplication變量:

var tla : WindowedApplication = FlexGlobals.topLevelApplication as WindowedApplication; 
tla.addEventListener('myCustomEvent',myEventListener); 

這被認爲是封裝中的一個突破,我不確定我會推薦它。應該用事件來溝通;但是應該使用執行方法和屬性來進行通信。在這種情況下,您正在使用事件進行通信。

讓外觀類監聽hostComponent上的事件有點像側身工作 - 不是向上或向下。我對此也有複雜的感覺。

+0

正是我需要的!謝謝!好好解釋一下吧! – 2012-04-26 02:40:16

+0

對於它的價值,我完全同意你的99%。最後的1%允許主人在皮膚上發生事件。我會說這是好的,不會違反父母規定。主持人可以很容易地換出一個新的皮膚,不會中斷,但與主機從皮膚獲取事件相反 - 這會變得棘手,它可能很容易「打破」或不按預期觸發 - 但只要它正在經歷一個事件 - 這仍然是一個「封裝護城河」,沒有一個很好的參考 - (或者至少它不應該,但像我說的 - 棘手);)。 – 2012-04-26 03:35:02