从外部调用mxml文件中的函数

时间:2011-10-28 09:02:18

标签: flash flex actionscript mxml

我有一个基本的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文件的确切类名是什么?

谢谢!

1 个答案:

答案 0 :(得分:4)

我建议使用接口而不是直接引用应用程序mxml的类。

  1. 定义界面:

    package behaviors {
        interface Initialiazable 
        {
            function init():void;
        }
    }
    
  2. 在应用程序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()");
            }
    
  3. 在其他应用中加载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>