Linux笔记AS笔记 PHP笔记 C笔记 FLASH 3D
返回首页
当前位置: 首页 > 开发笔记 > AS笔记 >

在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

  1. <mx:application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
  2. <mx:script>
  3. <!--[CDATA[
  4. import flash.utils.describeType;
  5. private var metaData:MetaDataExample = new MetaDataExample();
  6. private function displayDescription():void
  7. {
  8. textArea.text = describeType(metaData);
  9. }
  10. ]]-->
  11. </mx:script>
  12. <mx: TextArea width="100%" height="100%" id="textArea" />
  13. <mx: Buttonlabel="Describe" click="displayDescription()" />
  14. MetaDataExample.as
  15. package
  16. {
  17. import flash.utils.*;
  18. public class MetaDataExample
  19. {
  20. public function MetaDataExample()
  21. {
  22. }
  23. [Orange(size="very big", isTasty="Yes Yes Yes Yes!")]
  24. public function get prop():String
  25. { return "hello"; }
  26. public function set prop(value:String):void
  27. { }
  28. }
  29. }
复制代码
meta-config.xml
  1. <flex-config xmlns="http://www.adobe.com/2006/flex-config">
  2. <compiler>
  3. <keep-as3-metadata>
  4. <name>Orange</name>
  5. </keep-as3-metadata>
  6. <keep-generated-actionscript>true</keep-generated-actionscript>
  7. <source-path></source-path></compiler></flex-config>
  8. <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)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名:密码: 验证码:点击我更换图片
推荐内容