1

我正在尝试使用 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 

谁能告诉我为什么这不起作用或我该如何解决?

谢谢,模拟人生

4

3 回答 3

3

首先,我不建议您将 Flex 应用程序加载到另一个 Flex 应用程序中。Flex 框架中有现成可用的模块。您可以在此处阅读更多详细信息。

特别是您的情况如何,您应该阅读addChild()文档

注意:虽然该方法的子参数指定为 DisplayObject 类型,但该参数必须实现 IUIComponent 接口才能添加为容器的子级。所有 Flex 组件都实现了这个接口。

所以你可以UIComponent先添加,然后在那里添加你的系统管理员。

于 2011-05-26T10:07:30.490 回答
1

出现问题是因为您尝试添加到阶段的内容是 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"/>

干杯

于 2011-05-26T09:07:04.473 回答
0

只需将 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);
于 2011-05-26T11:36:46.070 回答