2010-05-25 97 views
0

我有這樣的問題: 我有2個自定義組件,它們有自己的嵌套層次結構......一個是另一個的容器。我必須「彼此熟悉」。我試圖做到這一點是使用全球性活動的方式(一個側射擊,另一個正趕上):兩個自定義類之間的基於事件的交互

Application.application.addEventListener("Hello", function (data:Event):void{ 
     // .. some actions 
    }); 

//and 
Application.application.dispatchEvent(new Event(Hello)); 

一切都是相當不錯的,但是有一個啄..當我試圖趕上事件,我無法訪問這個班級,誰在追趕它。例如: -

  1. 集裝箱觸發事件。
  2. 孩子注意它。
  3. 然後應該創建容器和它的孩子之間的連接。

但是,我唯一可以實現的就是在DynamicEvent中傳遞對容器的引用。是否有任何機會可以在事件處理函數中訪問該孩子。 或者,也許有解決這個問題更優雅的方式......

任何幫助,將greately感激:)

回答

1

在大多數情況下,目標或currentTarget當前會給你訪問該組件所觸發事件。

http://livedocs.adobe.com/flex/3/langref/flash/events/Event.html http://livedocs.adobe.com/flex/3/langref/flash/events/Event.html#currentTarget http://livedocs.adobe.com/flex/3/langref/flash/events/Event.html#target

但是,你的方法,你射擊從頂級應用程序的事件;而不是來自任何一個嵌套組件。這讓我感到不尋常。

我想象你有一個這樣的層次結構:

應用

--- Container1

------- container2的

我會建議擊發container2的事件並在容器中偵聽它1。

在container2的您的調度代碼將是這樣的:

this.dispatchEvent(new Event('myCustomEvent')); 

在container1可以監聽的事件是這樣的:

container2.addEventListener('myCustomEvent', onMyCustomEvent); 

如果您確實需要添加自定義事件數據參加你的活動;您可以創建自己的自定義事件類並添加數據。你有沒有一個特殊的用例來解決應用程序容器中的事件?我很樂意聽到它。

+0

你好,謝謝你的回覆。是的,我聽說過關於currentTarget和通常的射擊事件。這就是我使用全局事件的原因:假設,我有一個帶有動態內容的表單(不同數量的容器,有時嵌套層次很深)。除了控件,應該接收'myCustomEvent'還有其他幾十個控件(爲了更好的外觀和其他目的)...並且假設我應該從這個所有組件中獲取一組元素並「提取」到它們的鏈接。所以我只是用內置的監聽器創建所需的容器。然後只是發射給定的事件,讓他們彈出。 – Antenka 2010-05-25 14:25:03

+0

我不確定我是否理解你描述的用例。我的直覺告訴我,如果你不得不在應用程序級別發送事件,您可能從重構中受益。 – JeffryHouser 2010-05-25 16:02:48

+0

你的直覺似乎正常工作:)問題以其他方式解決..我只是好奇,如果(出於某種原因)我需要這樣做 - 是否有可能? – Antenka 2010-05-26 07:06:25

0

我們已經做了作爲Flextras說,創建自定義事件,在我們的例子凱恩戈姆事件和實際添加數據,到容器的引用你想要的事件響應回覆。儘管我並不喜歡這樣做,但在非常罕見的情況下,集裝箱可能不會處於可與之互動的狀態。在我們的例子中,我們有很多動態加載的模塊可以來來去去,然後WHAM!突然間,你會得到一個空指針異常的flex。但是,當你高度異步時,這是你付出的代價,很多空值檢查和異常捕獲。

+0

您好,我在向活動傳遞其他數據時沒有麻煩。我同意你的觀點,全球事件是解決問題的混亂方式,但在我的情況下,我確切地列出了你最終列出的內容。如果有更清潔的方法 - 我很樂意聽到它.. – Antenka 2010-05-25 14:31:16

0

您正在尋找的事件管理類型可以通過依賴注入框架(如MateSwiz)很好地解決。基本上,您需要在全局級別捕獲事件,然後在整個應用程序中執行各種組件中的各種操作,以處理這些事件。

Mate擁有EventMap的概念,允許您映射某些事件以各種方式與您的視圖進行交互。您可以在某些事件發生時將值注入視圖屬性或視圖內的調用方法。

如果您不想使用框架,請查看Event類的bubbles屬性。當您覆蓋Event類以創建自定義事件時,請將默認值設置爲true。這樣,無論您的應用程序嵌套在多大程度上,您的事件都會繼續向主應用程序發起衝擊。

+0

你好,謝謝作出迴應。我已經考慮過Mate框架,但我認爲增加框架的任務太小了。也是在玩「氣泡」..反正問題是以完全不同的方式解決的......現在只是爲了滿足我的好奇心:所以看起來不可能獲得對象的引用,誰正在處理在應用程序中分派的事件水平? – Antenka 2010-05-26 07:03:17