我有一个基本的mxml应用程序,看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="800" height="600">
<mx:Script>
<![CDATA[
public function init():void{
}
使用Loader将此swf加载到另一个swf中,并添加addChild(loader);
然后我需要从父swf调用init函数。我怎样才能做到这一点? 只是打电话
loader.content.init();
失败。
另一个问题是,这个mxml文件的确切类名是什么?
谢谢!
答案 0 :(得分:4)
我建议使用接口而不是直接引用应用程序mxml的类。
定义界面:
package behaviors {
interface Initialiazable
{
function init():void;
}
}
在应用程序mxml中实现接口:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application implements="behaviors.Initialiazable"
width="800" height="600"
xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
public function init():void{
trace("Application.init()");
}
在其他应用中加载SWF应该是这样的:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.managers.SystemManager;
import behaviors.Initializable;
private var loadedApp:Initializable;
protected function handleSWFLoaderComplete(e:Event):void
{
// wait for the Flex application to load
var loadedAppSystemManager:SystemManager = e.target.content as SystemManager;
loadedAppSystemManager.addEventListener(FlexEvent.APPLICATION_COMPLETE, handleApplicationComplete);
}
protected function handleApplicationComplete(e:FlexEvent):void
{
// cast the loaded application to the Interface
loadedApp = (Initializable) e.currentTarget.application;
loadedApp.init();
}
]]>
</mx:Script>
<mx:SWFLoader source="LoadedApp.swf" complete="handleSWFLoaderComplete(event)"/>
</mx:Application>