在FlexBuilder3中使用Actionscript3进行元编程
时间:2010-03-12 13:57来源:未知 作者:admin 点击:次
我对 as3 元编程的兴趣始于,Ely Greenfield博客上的一篇文章( http://www.quietlyscheming.com/b ... ax-no-not-that-one/ )。其中关于 flash .utils.describeType(): XML 的用法在一瞬间吸引了我的眼球。在过去
我对as3元编程的兴趣始于,Ely Greenfield博客上的一篇文章(http://www.quietlyscheming.com/b ... ax-no-not-that-one/)。其中关于flash.utils.describeType():XML的用法在一瞬间吸引了我的眼球。在过去的一年内,我从没见到任何人使用过。
如果你在一个类中调用describeType(this),将会返回类中非静态的公共成员。其目的是为了“对象的自我测量”,换句话说,是为了在运行时查看类中的元素,例如属性和方法。这相当于使用for…in循环去扫描对象的属性。如果你想和getDefinitionByName()共同使用。例如describeType(getDefinitionByName(“myClass”)),那么该方法只会返回目标的静态成员。
那么看看Ely在他博客中怎么说的:“Flex2开发周期快要结束的时候。我们给FlashPlayer API加入了一个特性,就是允许我们在运行时通过describeType()使用一些ActionScript的元数据。在Flex2.01的时候,我们最终使得‘开发人员能够在运行时定义哪些元数据被保存’变得可能了。到Flex3的时候,我们已经让它变得更容易去保存元数据了。一些人已经发现了这个功能,并开始使用它去做一些有趣的事情。”
Ely接着演示了一个例子,展示了一些可能使用的元数据,并且做了一个demo,在一个网页上他称之为“通过元数据阐述绑定和响应”,在另外一个网页上称之为“通过自定义ActionScript元数据进行元编程”。但它真的很有趣,你真该看看。
于是我开始尝试使用元数据,但起初并不太顺利。我能够编译Ely的demo,但第一次自己写的时候失败了。于是我通过google搜索了一下,发现另外一篇名为“在Flex中创建我们自己的元数据” http://orangeflash.eu/?p=45的文章。我尝试去它的代码,但是使用-load-config+="meta-config.xml"编译配置的时候,又长生一个错误。我检查mxmlc的命令行选项,似乎是在说mxmlc 3(189825)需要在-load-config和xml文件间需要加一个空格。哦,好的。无论如何,元数据很有趣。加下来我们来看看代码
Index.mxml
- <mx:application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
- <mx:script>
- <!--[CDATA[
- import flash.utils.describeType;
- private var metaData:MetaDataExample = new MetaDataExample();
- private function displayDescription():void
- {
- textArea.text = describeType(metaData);
- }
- ]]-->
- </mx:script>
- <mx: TextArea width="100%" height="100%" id="textArea" />
- <mx: Buttonlabel="Describe" click="displayDescription()" />
- MetaDataExample.as
- package
- {
- import flash.utils.*;
- public class MetaDataExample
- {
- public function MetaDataExample()
- {
- }
- [Orange(size="very big", isTasty="Yes Yes Yes Yes!")]
- public function get prop():String
- { return "hello"; }
- public function set prop(value:String):void
- { }
- }
- }
复制代码
meta-config.xml
- <flex-config xmlns="http://www.adobe.com/2006/flex-config">
- <compiler>
- <keep-as3-metadata>
- <name>Orange</name>
- </keep-as3-metadata>
- <keep-generated-actionscript>true</keep-generated-actionscript>
- <source-path></source-path></compiler></flex-config>
- <path-element>.</path-element>(译注:这对标签我加上去编译就报错)
复制代码
编译参数:-locale en_US -keep-as3-metadata Orange -load-config "/Users/nuno/Desktop/Projects/FlexWorkspace/MetaDataTest/src/meta-config.xml"(记得加空格)
这是我第一个使用ActionScript3元数据的实验。我想我会做更多的实验。因为在运行时载入一个SWF文件或者其他情况下,创建和使用元数据是一件很有意思的事情。 (责任编辑:admin) |
------分隔线----------------------------