您的位置:首页 > 其它

【教程】【FLEX】#004 反射机制

2014-12-28 15:06 148 查看
总结:

目前用到反射的主要有两个方法

1. getDefinitionByName //根据类名,返回对象(反射实例化对象)

2. describeType //根据对象,返回XML格式的属性,方法等信息(反射得到对象的属性和方法)

3. 这两个混用,根据一个类名,获取它的所有属性、方法(不包括 private,protected, [Bindabel] 修饰的 || static 的属性,直接传入类名,就可以获取到)

声明:

由于刚接触Flex不是很久,所以对Flex不是很了解。反射这一块,了解的不是很深。只够 基本的应用。

如果有什么地方有问题,请指出来。 谢谢。

Q:什么事件,事件的作用?

引用:/article/4684255.html (C#的反射)

(PS:这个博主,是参照 《大话设计模式》里面的,不过博主把代码也粘上去了,方便看源代码。)

题外话:

说到大话系类的书籍,我还是很喜欢的。看这种书籍,就像看故事一样,不会累。而且一个个故事又何尝不是一个个实际中使用例子呢?

所以,看的轻松,又可学习到如何运用,在上面场景应用,有什么好处?

何乐而不为呢?

不过学习还是需要耐心的。再好的书籍也是只是一个引导,需要自己的努力。

-------zhongxia

公司有一个项目,需要根据控件的类名(eg: mx.controls.Button,这些类名是存放在数据库中)来生成相对应的控件。

实现思路(简单的思路,勿吐槽):

1、获取控件的类名

2、反射得到相对应的类

3、生成相对应的控件,添加到面板中

代码例子(片段): 根据类名(字符串),实例化一个类

var controlType:String = datas[0].Appoint;   //获取控件类名,data是数据库读出来的数据

var classRefrence:Class = getDefinitionByName(controlType) as Class;  //反射成对应的类

var control:UIComponent = new classRefrence() as UIComponent;       //实例化控件

this.addChild(control);       //添加控件到面板中(Flex3.0的方法,Flex4.0需要用  addElement(control); )


反射当然不是只有上面这个小伎俩啦,反射还可以做到:1、反射出这个类的所有方法 (公有的) 2、反射出方法,并执行它。 etc....

一个常用的反射类。(想了解源代码,请下载该文件,研究研究。简单的反射机制就有了点了解。)





地址:【Flex资源】#500 常用反射类

里面提供的方法:

1、传入一个对象,获取类名

2、传入类名和属性名,获取属性值

3、传入类名,方法名,和参数,然后执行这个方法。

4、获取一个对象的所有方法(公有的)。

5、获取一个对象的所有属性(公有的,[Bindabel]也获取不到)。

上面直接放了一个代码文件,看代码还需要下载下来,比较麻烦。所以这边粘一个获取所有公有属性的方法出来。

方便阅读。

采用的是describeType的方法。

/**

* 传入一个对象,获取这个对象里面的所有属性,并返回JSON格式的字符串

* @time  2014年12月27日 21:29:45

* */

public function getJsonFromObject(obj:Object):String

{

if(obj == null)

{

return "";

}

var json:String ="{";

var properties:XMLList  = describeType(obj).variable;

for each(var property:XML in properties){

//@ 是出现在flex解析xml时用到,非XML无法使用,会报错

// @指属性,不加@的是指其子节点

var propertyName:String = property.@name;

json += "\"" + propertyName + "\":\"" + obj[propertyName] + "\",";

}

json = json.substr(0,json.length-1);

json += "}";

return json;

}


题外知识:

Flex 中 @的含义:注意,只有解析XML的时候才可以用(尝试解析过Object对象,报错)



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: