我正在尝试使用SWFLoader加载应用程序并将加载的应用程序添加到我的Displaylist。
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
答案 0 :(得分:3)
首先,我不建议您将Flex应用程序加载到其他Flex应用程序中。现在可以使用Flex框架中的模块。您可以阅读更多详细信息here。
特别是你应该read addChild()
documentation:
注意:虽然孩子的参数是 方法指定为类型 DisplayObject,参数必须 实现IUIComponent接口 作为容器的子项添加。 所有Flex组件都实现了这一点 接口
因此,您可以先添加UIComponent
,然后在那里添加系统管理员。
答案 1 :(得分: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"/>
干杯
答案 2 :(得分: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);