鉴于以下内容:
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2009/mxml">
<mx:Panel title="blah">
<mx:Button />
</mx:Panel>
</mx:Application>
默认情况下,mxmlc可以告诉我子元素(例如mx:Button)在父元素(例如mx:Panel)中的分配位置。您可以设置“ DefaultProperty ”编译器元数据标签,以指定它们的分配位置,以及未指定时Flex的功能。
例如,我遍历了所有flex类的源mx:Panel继承自,并且从未提及DefaultProperty,这让我想知道DefaultProperty的默认值是什么。
对于任何noobishness感到抱歉,但我已经阅读了里面的文档。
答案 0 :(得分:4)
编写基于AS的组件时,默认属性允许您指定可用作子标记的属性。例如:
<MyComp:TextAreaDefaultProp>Hello</MyComp:TextAreaDefaultProp>
您也可以使用:
<MyComp:TextAreaDefaultProp defaultText="Hello" />
未指定时会发生什么?您没有获得该属性的值。给出以下组件:
package
{
// as/myComponents/TextAreaDefaultProp.as
import mx.controls.TextArea;
// Define the default property.
[DefaultProperty("defaultText")]
public class TextAreaDefaultProp extends TextArea {
public function TextAreaDefaultProp()
{
super();
}
// Define a setter method to set the text property
// to the value of the default property.
public function set defaultText(value:String):void {
if (value!=null)
text=value;
}
public function get defaultText():String {
return text;
}
}
}
运行此代码段:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" width="535" height="345"
xmlns:local="*">
<mx:VBox>
<local:TextAreaDefaultProp id="a" defaultText="Hello"/>
<local:TextAreaDefaultProp id="b" > World </local:TextAreaDefaultProp>
<local:TextAreaDefaultProp id="c" />
<mx:TextArea id="z"/>
<mx:Button click="{z.text = a.defaultText
+ ' ' + b.defaultText
+ ' ' + (c.defaultText.length);}" />
</mx:VBox>
</mx:Application>
答案 1 :(得分:1)
编译器实际上将容器的子组件视为特殊情况。请查看childDescriptors
的{{1}}属性以获取一些解释。在MXML中创建Flex组件实例时,不会立即实例化它。而是创建一个“描述符”,用于在将来某个时间实例化组件,由容器的mx.core.Container
属性决定。如果将creationPolicy
参数(或缩短版本-keep-generated-actionscript
)添加到编译器参数中,您将能够看到编译器从MXML生成的AS3代码。