我在我的应用程序中嵌入了一个swf文件
<mx:SWFLoader source="@Embed(source='mod/VideoModule.swf')" width="50" height="50" id="loader" creationComplete="initLoader()" />
现在借助flex文档,我想通过创建一个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
任何想法?
提前致谢
塞巴斯蒂安
答案 0 :(得分:3)
首先,我使用SWF加载器的完整事件ad,创建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);
}
答案 1 :(得分:0)
詹姆斯是对的,虽然它可能更简单。您可以使用完整的事件开始使用类似的SWFLoader声明:
<mx:SWFLoader source="@Embed(source='mod/VideoModule.swf')"
width="50"
height="50"
id="loader"
complete="swfLoaded(event)" />
然后你可以直接在你的处理程序中引用loader对象(假设脚本与SWFLoader声明在同一个MXML文件中):
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事件设置处理程序,以便在出现问题时妥善处理事情。