невозможно добавить приложение в список отображения - PullRequest
1 голос
/ 26 мая 2011

Я пытаюсь использовать 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 

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

Спасибо, Sims

Ответы [ 3 ]

3 голосов
/ 26 мая 2011

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

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

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

Таким образом, вы можете сначала добавить UIComponent и добавить системный менеджер.

1 голос
/ 26 мая 2011

Проблема возникает из-за того, что вы пытаетесь добавить на сцену тип 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"/>

Приветствия

0 голосов
/ 26 мая 2011

Просто добавьте 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);
...