Вызов функции из mxml-файла извне - PullRequest
0 голосов
/ 28 октября 2011

У меня есть базовое 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{

        }

этот SWF-файл загружается в другой SWF-файл с помощью Loader и добавляется с помощью addChild (loader);

Затем мне нужно вызватьфункция init из родительского swf.Как я могу это сделать?просто вызов

loader.content.init();

не удался.

другой вопрос, каково точное имя класса этого файла mxml?

спасибо!

1 Ответ

4 голосов
/ 28 октября 2011

Я бы предложил использовать интерфейс вместо прямой ссылки на класс приложения 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>
    
...