Adobe Flash Builder(Flex4):此类中不可用addChild()。

8
我想在Flex 4应用程序中加载一个swf文件,以便使用它的类。
var ldr:Loader=new Loader();
ldr.load(new URLRequest("file://path/to/fileswf"));
ldr.contentLoaderInfo.addEventListener(Event.INIT, loaded);
function loaded(evt:Event):void { addChild(ldr); }

我收到了以下错误信息:

错误:此类中不可用 addChild()。请改用 addElement() 或修改皮肤(如果有)。
位于 spark.components.supportClasses::SkinnableComponent/addChild()[E:\dev\gumbo_beta2\frameworks\projects\spark\src\spark\components\supportClasses\SkinnableComponent.as:966]
位于 main/private:init/loaded()[C:\Documents and Settings\ufk\Adobe Flash Builder Beta 2\xpogames-toolkit-test\src\main.mxml:22]

如果我将 addChild() 改为 addElement(),则会收到以下编译错误:

1067: 将类型为 flash.display:Loader 的值隐式转换为不相关的类型 mx.core:IVisualElement。main.mxml path/dir line 22 Flex Problem

有什么解决方法吗?

4个回答

23

创建另一个容器来放置displayObject:

// container ( IVisualElement ) for DisplayObjects
var container:UIComponent = new UIComponent();
addElement( container );

// displayObject goes to container
var displayO:Sprite = new Sprite();
container.addChild( displayO );

使用ActionScript SDK的Facebook分散器非常出色。谢谢。 - Pierre Valade
@Scott 创建了一个包装元素,我记得.... 我想找出来,但是我不再有那段代码的访问权限了,那是以前的工作! - Matt Lacey

2
在Flash Builder 4完整版中,没有this.rawChildren。
解决问题的最佳方法是将每个所需的类转换为Flex组件,并在Flex应用程序中使用它:
1. 下载并安装Flex组件套件http://www.adobe.com/cfusion/entitlement/index.cfm?e=flex_skins 2. 创建一个电影剪辑
3. 转换为Flex组件
4. 将相关函数添加到此类中
以下是一个附加到即将转换为Flex组件的电影剪辑的类的框架:
package {
import mx.flash.UIMovieClip;
import flash.text.TextField;
import flash.events.Event;
import flash.events.MouseEvent;
public dynamic class challenge_screen extends UIMovieClip {

    public function challenge_screen() {
        super();
    }
}
} 

扩展到 MovieClip 然后添加到 UIComponent 也可以运行。 - ufk

0
private var _loader:SWFLoader = new SWFLoader();
private var _uicomponent:UIComponent = new UIComponent();
private function swfLoaded(event:Event):void 
{
Alert.show("inside swf Loaded");
var content:DisplayObject =_loader.content;
_uicomponent.addChild(content);
} 
public function loadSWF () : void 
{   

_loader.addEventListener(Event.INIT, swfLoaded);
_loader.load("http://intelliveysoft.com:5080/myelearn/Admin.swf"); 
addElement(_uicomponent);
}

试试这个。它会起作用的。


2
不要只贴一段代码,而是请解释为什么这段代码可以解决所提出的问题。没有解释,这不是一个答案。 - Martijn Pieters

0

this.rawChildren.addChild(ldr)应该可以正常工作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接