actionscript addChild首先需要显示对象

tou*_*ouB 6 apache-flex adobe actionscript mxml flex4

解:

如果你有同样的问题,addElement()而不是addChild()就是这样做的


我正试图从mxml转移到actionsctipt.我有一个<s:Rect>我已创建并设置其属性,但无法添加它.

var aRect:Rect = new Rect();
//set properties like aRect.x, aRect.y, aRect.width, aRect.height

//tried adding it various ways
addChild(aRect);
Application.addChild(aRect);
Application.application.addChild(aRect);
stage.addChild(aRect);
Run Code Online (Sandbox Code Playgroud)

但我一直得到错误 1067:类型spark.primitives的值的隐式强制:Rect到不相关的类型flash.display:DisplayObject

最初是在mxml中,它内部<s:Application>没有嵌套在任何内容中

<s:Application>

    <s:Rect id="aRect" x="10" y="10" width="15%" height="15%">
         //then fill code here, removed for readability
    </s:Rect>

</s:Application>
Run Code Online (Sandbox Code Playgroud)

什么是交易,我认为actionscript会比mxml更好.

Myk*_*Myk 1

这是因为 Flex 4 显着改变了基于 MXML 的应用程序中显示层次结构的工作方式。这有点令人困惑,因为 addChild() 不再像您希望的那样简单 - 您必须将元素添加到数据提供者,然后显示这些元素的逻辑(添加哪些元素,在哪里添加,如何对它们进行换肤)等)在其他地方处理。不过,这是一个有用的改变,因为它迫使您以非常具体的方式分离您的关注点。将所有元素添加到 dataProvider 后,您可以随意交换 Layout 对象(甚至在运行时)以更改应用程序的外观。

编辑:从技术上讲,他们改变的并不是 displayList 本身。事实上,Flex 使用的基本单位现在是“组”——甚至是 s:Application 扩展组。您将内容添加到组(或顶级应用程序),然后为该组分配一个布局,告诉它如何显示您添加的项目。