在FlexBuilder3中使用Actionscript3进行元编程

http://flash.9ria.com/thread-46708-1-1.html我对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文件或者其他情况下,创建和使用元数据是一件很有意思的事情。

你可能感兴趣的:(编程,xml,Flex,Flash,actionscript)