星期日, 2月 07, 2010

在loader中用sharedEvents與子swf交換事件


在子swf發送事件並在主swf偵聽:
caller.swf
ldr.contentLoaderInfo.sharedEvents.addEventListener('自定義事件', handler);

becaller.swf
this.loaderInfo.sharedEvents.dispatchEvent(new Event('自定義事件'));


同理:
在主swf發送事件並在子swf偵聽:
caller.swf
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, function() {     ldr.contentLoaderInfo.sharedEvents.dispatchEvent(new Event('自定義事件'));
});

becaller.swf
this.loaderInfo.sharedEvents.addEventListener('自定義事件', handler);


這邊要注意如果子swf還沒讀取完就發送事件事沒有用的。

結論就是,一切的事件相互溝通的行為都要透過sharedEvents



還有一個很不錯的用法:
可以用ValueObject夾帶物件經由事件互相傳送。


02/09/2010補記
子swf內不能對stage做更動,例如
stage.scaleMode = StageScaleMode.NO_SCALE;
否則子swf被讀入的時候會產生
TypeError: Error #1009: 無法存取 Null 物件參考的屬性或方法。


參考:
無寶落鳳 - AS3 與加載的子 SWF 共享事件 sharedEvents
Ticore's Blog - 利用 SharedEvents 作部分 Cross-Domain Scripting
9RIA.com天地會 - 關於loaderinfo與contentloaderinfo
Adobe® Flex™ 3.2 語言參考 - LoaderInfo

沒有留言:

張貼留言