Flex: странный вопрос, невозможно получить доступ к свойству приложения в событии init SWFLoader - PullRequest
0 голосов
/ 24 декабря 2009

Очень странная проблема, я новичок в AS, но должен сказать, что сложно понять, что AS - современный язык:


            private function completed():void
            {               
                trace("completed.");                
                var player:Object = (loader.content as SystemManager).application as Object;
                player.playVideo();
                player.setSize(200,300);
            }


    SWFLoader id="loader" horizontalCenter="0" width="100%" height="362" source="http://localhost:8000/testflv1.swf" init="completed()"

Что я хочу сделать, это встроить SWF в другой родительский SWF и вызвать функцию из родительского объекта во встроенный SWF. Затем я использую событие init для SWFLoader, чтобы вызвать метод. Прежде чем сделать это, я убедился, что с использованием того же кода в обработчике нажатий кнопок все в порядке с:

var player:Object = (loader.content as SystemManager).application as Object;

Но если в обработчике события init приложение (loader.content as SystemManager) является нулевым.

Принимая во внимание, что в документе SWFLoader:

init Dispatched when the properties and methods of a loaded SWF file are accessible.

Ответы [ 2 ]

1 голос
/ 24 декабря 2009

Я думаю, что проблема здесь, потому что свойство приложения вашего включенного файла еще не инициализировано. Вы можете прослушать событие APPLICATION_COMPLETE, которое сообщит вам, когда свойство приложения вашего SWF-содержимого будет завершено.

        public var loadedSM:SystemManager;

        private function init():void
        {                               
            trace("init.");                            
            loadedSM = SystemManager(loader.content);
            loadedSM.addEventListener(FlexEvent.APPLICATION_COMPLETE, callFunc);                
        }

        private function callFunc(event:FlexEvent):void
        {
            LoadFileInclude(loadedSM.application).playVideo();
        }

    ]]>
</mx:Script>
<mx:SWFLoader id="loader" horizontalCenter="0" width="100%" height="362" source="LoadFileInclude.swf" creationComplete="init()" />  

0 голосов
/ 05 октября 2011

У меня была такая же проблема. Погуглил навсегда и, наконец, нашел ответ, который привел меня к решению, похороненному в этой старой теме Наббла .

По сути, когда внедряется SWF-файл, сам MovieClip находится в другом месте, и его довольно сложно достать. Что я сделал:

MXML:

    <mx:SWFLoader
       id="loader"
        source="@Embed(source='/flash/preloader.swf')" />
AS:
    var mc:MovieClip = Loader(DisplayObjectContainer(swf.content).getChildAt(0)).content 
            as MovieClip;
    if(mc)
    {
        mc.callAFunction();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...