2010-06-23 97 views
3

我在flex中有一個應用程序,它有一些組件和很多自定義組件和事件。獲取特定組件上的所有事件偵聽器

我想要在運行時獲取特定組件上的所有事件偵聽器,我知道如何使用猴子修補框架來完成它,但我不想使用猴子補丁,也不能在生產中依賴此功能。

有沒有辦法?

回答

2

EventDispatcher具有相當渺茫公共接口:

  • addEventListener
  • dispatchEvent
  • hasEventListener
  • removeEventListener
  • willTrigger

這意味着偵聽器的列表沒有公開。您只能說明是否至少有一個事件偵聽器用於特定類型的事件。

我會重新檢查你爲什麼需要做你想做的事情。在典型的Observer Pattern中,偵聽器列表不打算暴露。如果你試圖獲得這份清單,那麼我有一種強烈的感覺,那麼你正從一個錯誤的方向接近更高層次的問題。

+0

+1。通常,當問這個問題時,更高級別的問題只是由於未被刪除的處理程序而導致的內存泄漏。 :) – back2dos 2010-06-23 12:52:13

+0

@ back2dos也許通常情況下,我可以向你保證,這不是我的情況。 我想通過SWFLoader訪問一個已編譯的應用程序,並獲取特定對象上的所有事件偵聽器。 這個概念是構建一些測試框架。 @James EventDispatcher並沒有幫助我如此。謝謝 – KensoDev 2010-06-23 13:53:25

2

你不行。您可以僅使用自定義組件並重寫addEventListener來收集信息。我真的不明白爲什麼猴子補丁不起作用。 Flex功能強大,但設計不佳,我想你必須忍受這一點。

+0

需求不是猴子補丁,應用程序的概念是通過SWFLoader使用另一個應用程序並顯示其數據的應用程序。 像FxSpy的東西我只需要事件部分。 – KensoDev 2010-06-23 13:54:24

+0

@KensoDev:在這種情況下,您唯一的選擇是在加載應用程序之前修改應用程序,以提供必要的鉤子來收集您需要的信息。這可以在AVM2上完成,將swf加載到ByteArray中,對其進行修改,然後將其加載到加載程序中。或者您等到AVM2支持運行時/ boottime編織的AOP。 – back2dos 2010-06-23 14:35:11