2009-07-07 65 views
2

我在我的應用程序與Flex文檔的幫助下嵌入一個SWF文件互動與SWF加載

<mx:SWFLoader source="@Embed(source='mod/VideoModule.swf')" width="50" height="50" id="loader" creationComplete="initLoader()" /> 

現在我想通過創建一個SystemManager將與我的加載的SWF互動

[Bindable] 
    public var loadedSM:SystemManager; 

    private function initLoader() : void { 
     trace(loader.content); 
     loadedSM = SystemManager(loader.content); 
     var b: Button = loadedSM.application["button1"] as Button; 
     b.addEventListener(MouseEvent.CLICK, test); 
    } 

但當啓動應用程序錯誤#1034發生,並說,Main__embed_mxml_mod_VideoModule_swf_856293516 @ 33f53c1無法轉換爲mx.managers.SystemManager

任何想法?

在此先感謝

塞巴斯蒂安

回答

3

所以,首先我會使用SWF加載廣告的完整事件創建SWF加載時creationComplete事件就會觸發,而不是與它的內容已加載。

<mx:SWFLoader source="@Embed(source='mod/VideoModule.swf')" width="50" height="50" id="loader" complete="loaderCompleteHandler(event)" /> 

然後我還會在事件觸發時傳遞FlexEvent參數。該事件使您可以訪問SWFLoader的實例。 SwfLoader然後有一個名爲content的屬性,它可以讓你訪問加載的swf。如果swf然後公開名爲button1的屬性,則可以執行如下操作:

private function loaderCompleteHandler(event : FlexEvent) : void 
{ 
    var swfLaoder : SWFLoader = SWFLoader(event.target); 
    swfLaoder.content["button1"].addEventListener(MouseEvent.CLICK, test); 
} 
0

James是對的,雖然它可能更簡單。你可以用類似的SWFLoader聲明開始,使用完整的事件:

<mx:SWFLoader source="@Embed(source='mod/VideoModule.swf')" 
    width="50" 
    height="50" 
    id="loader" 
    complete="swfLoaded(event)" /> 

然後你就可以在你的處理器直接引用Loader對象(假設腳本是在同一個MXML文件用作SWFLoader聲明):

private function swfLoaded(event:Event):void 
{ 
    loader.content['button1'].addEventListener(MouseEvent.CLICK, test); 
} 

或者,如果你想使用的SystemManager功能,可以投的內容到的SystemManager去從那裏:

var loadedSM:SystemManager; 
private function swfLoaded(event:Event):void 
{ 
    loadedSM = SystemManager(loader.content); 
    var b:Button = loadedSM.application["button1"] as Button; 
    b.addEventListener(MouseEvent.CLICK, test); 
} 

當然,你的概率巧妙地想要爲SWFLoader的ioError和securityError事件設置處理程序,以便在出現問題時正確處理事情。