2010-10-04 44 views
0

讓我們考慮下面的例子,我有包含「Person」對象集合的「Document」對象,並且每個「Person」對象都有「Address」對象集合。當其中一個「地址」對象發生變化時,我需要調用服務器端方法來計算一個人(其「地址」已更改)的所有地址之間的最佳路徑並更新用戶界面。我需要知道地址之一發生了變化,地址發生了變化。 到目前爲止,我唯一的解決方案是實現某種事件冒泡。當「地址」對象發生變化時,它通知父(「人」對象)有關更改,「人」通知「文檔」。現在我們可以將偵聽器添加到「文檔」類並進行必要的操作。這種方法的缺點 - 我必須爲層次結構中的所有對象管理「父」鏈接。有人可以評論這個解決方案嗎?好嗎?或者我在這裏做錯了什麼?是事件冒泡模式適用於分層模型嗎?

謝謝。

回答

0

你在正確的軌道上。

當您創建事件時,只需將bubbles屬性設置爲true即可。

http://www.igorcosta.com/flex3/doc/flash/events/Event.html#bubbles

你必須添加的文檔類事件偵聽器在ActionScript [除非你定義的文檔類事件的元數據],但它應該工作和氣泡W/O問題。

如果沒有令人信服的理由讓您「趕上/重新發送」我不會再費心去重新創建輪子。

+0

Flex事件冒泡只適用於UI元素。我需要在模型類中冒泡。所以這是行不通的。 – Aleksey 2010-10-04 22:20:53

+0

Bubbling是事件基礎結構的一部分,獨立於Flex UI Elements,完全不依賴於Flex。爲了能夠分派一個事件,你確實需要擴展EventDispatcher。但是,冒泡應該不管。 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/EventDispatcher.html?filter_flex=4.1&filter_flashplayer=10.1&filter_air=2您知道的區別嗎? – JeffryHouser 2010-10-04 22:33:41

+0

對不起,我的意思是事件冒泡只適用於可視化樹中的DisplayObject。我無法在文檔中找到此聲明的證據,但在我看來,這是顯而易見的 - IEventDispatcher如何知道誰在引用它,如果在不同對象中引用兩個參數? – Aleksey 2010-10-04 22:54:42

1

您可以使用「父」字段管理自己的層次結構,也可以讓父對象監聽其子代並重新分派事件。這大概可以通過一些共享的幫助程序代碼進行管理。