Невозможно добавить приложение в список отображения

Я пытаюсь использовать SWFLoader для загрузки приложения и добавления загруженного приложения в мой список отображения.

public function onComplete(e:Event):void {
    someContainer.addChild((e.target.content));
}

//somewhere in main
var loader: SWFLoader = new SWFLoader();
loader.addEventListener(Event.COMPLETE, onComplete);
loader.load(urlToSwf);

Я получаю сообщение об ошибке

cannot convert _Main_mx_managers_SystemManager@c513eb9 to mx.core.IUIComponent 

Кто-нибудь может сказать мне, почему это не сработает или как я могу это исправить?

Спасибо симс

3 ответа

Прежде всего, я не рекомендую вам загружать приложения Flex в другое приложение Flex. Есть готовые к использованию Модули, представленные во Flex Framework. Вы можете прочитать более подробную информацию здесь.

Что о вашем случае, в частности, вы должны прочитать addChild() документация:

Примечание. Хотя дочерний аргумент метода указан как тип DisplayObject, аргумент должен реализовывать интерфейс IUIComponent, который будет добавлен как дочерний элемент контейнера. Все компоненты Flex реализуют этот интерфейс.

Так что вы можете добавить UIComponent и добавьте туда своего системного менеджера.

Проблема возникает из-за того, что вы пытаетесь добавить на сцену тип SystemManager и, конечно, вы хотите добавить свое приложение в список отображения.

Так что попробуйте это:

<mx:Script>
    <![CDATA[
        import mx.events.FlexEvent;
        import mx.managers.SystemManager;

        private var _systemManager:SystemManager;

        protected function onLoaderComplete(event:Event):void
        {
            _systemManager = SystemManager(loader.content);
            _systemManager.addEventListener(FlexEvent.APPLICATION_COMPLETE, onApplicationComplete);
        }

        private function onApplicationComplete(event:FlexEvent):void
        {
            mainContainer.addChild(_systemManager.application);
        }
    ]]>
</mx:Script>

<mx:SWFLoader id="loader" source="main.swf" width="800" height="600" autoLoad="true" complete="onLoaderComplete(event)"/>

<mx:VBox id="mainContainer"/>

ура

Просто добавьте SWFLoader в контейнер.

public function loader_completeHandler(event:Event):void
{
    var loader:SWFLoader = event.target as SWFLoader;
    someContainer.addChild(loader);
}

//somewhere in main
var loader:SWFLoader = new SWFLoader();
loader.addEventListener(Event.COMPLETE, loader_completeHandler);
loader.load(urlToSwf);
Другие вопросы по тегам