2010-01-04 73 views
0

我正在開發一個帶有Flash Builder 4 Beta 2(夜間SDK)的AIR應用程序,我沒有使用像mate這樣的框架。我在我的應用程序中有幾個視圖和組件。大綱可能如下所示:不使用框架處理flex事件?

root 
|- mainview 
|-- toolbar 
|-- catalogue view 
|--- tree 
|--- datagrid 
|-- statusbar 

這不是我的項目的100%結構,但可以作爲示例。當應用程序被初始化時,樹加載它的數據,在我的情況下是一個類別列表。當用戶單擊樹中的項目時,將加載數據網格的數據。

在每次點擊一棵樹項目時,我都會派發一個事件。該事件起泡並攜帶被點擊項目的VO。現在我想讓我的數據網格捕捉這個事件。 Currenty我註冊的事件偵聽此事件是這樣的(使用類和功能):

FlexGlobals.topLevelApplication.addEventListener(eventName, this.eventHandler); 

此代碼是在DataGrid的創作完整的監聽器執行。不知何故,這似乎有點bug(儘管它的作品)。或者在頂級應用程序中註冊組件的事件偵聽器是否是常見的技術?

回答

1

是的,這是一個非常好的解決方案。一些框架將事件偵聽器添加到頂部顯示對象,如Mate和Swiz,以便他們可以完全做到這一點。請查看Source for Mate's GlobalDispatcher。 Swiz使用類似的東西,另外還有一個Cairngorm風格的CentralDispatcher用於非顯示對象全局事件:Source for Swiz's CentralDispatcher

如果要全局偵聽顯示對象事件,請在頂層應用程序中註冊事件偵聽器;其他任何事情都會讓它變得太複雜。框架往往只是通過元數據(Swiz,Cairngorm 3,Parsley)和EventMaps(Mate)來抽象所有遠離你的東西。