Flex编译器元数据“DefaultProperty”

时间:2009-03-30 17:53:38

标签: flex actionscript-3 mxml

鉴于以下内容:

<?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感到抱歉,但我已经阅读了里面的文档。

2 个答案:

答案 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代码。