不知道大家注意到没有,诸如Parsley、FlexUnit框架都使用了不少自定义元数据标签。在Flex中怎样自定义元数据标签?进一步说,如何为类、属性方法添加自定义元数据标签供运行时使用?我们将以用三个步骤解答这个问题。第一步:配置编译器;第二步:编写元数据标签;第三步:使用describeType方法。
1. 配置编译器
新建Flex库项目:添加额外的编译参数-locale en_US -keep-as3-metadata+=VariableMeta,PropertyMeta,MethodMeta,元数据标签名称由逗号分隔。
提示:使用-keep-as3-metadata生成SWC库,将其添加到目标项目并在该项目中使用元数据标签,再也不需要配置额外的编译参数。
2. 编写元数据标签
如下代码:
package { [ClassMeta(param1 = "value 1")] public class TestClass { [VariableMeta(param1 = "value 1")] public var someVariable:String; [PropertyMeta(param1 = "value 1", param2 = "value 2")] private var _someProperty:String; public function get someProperty():String { return _someProperty; } public function set someProperty(value:String):void { _someProperty = value; } [MethodMeta(param1 = "value 1")] public function someMethod():void { } private var _seriesType:String; [Inspectable(category="General", enumeration="Line,Mountain,Candlestick,HLOC", defaultValue="Mountain")] public function get seriesType():String { return _seriesType; } public function set seriesType(value:String):void { _seriesType = value; } } }
为便于大家理解元数据标签,我们在代码的最后部分添加了Flex SDK中自带的Inspectable元数据标签。
3. 使用describeType方法
使用describeType(TestClass)生成描述该对象的XML 对象。然后我们就可以对该对象进行反射编程了。