首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

flex 中As3Commons的施用學習

2012-10-13 
flex 中As3Commons的使用學習???}???trace( name +constructor.declaringType.name+paramers+ps)??

flex 中As3Commons的使用學習

???}
???trace(" name ="+constructor.declaringType.name+"paramers="+ps);
???
???//獲取绑定的属性
???var bindable:Array=type.getMetaData("Bindable");
???var m:Method=type.getMethod("setEmp");
???//獲取静态常量
???var constArray:Array=type.staticConstants;
???for(var i=0;i<constArray.length;i++)
???{
????? var aconst:Constant=constArray[i] as Constant;
????? trace("name ="+aconst.name+"? DeclareType="+aconst.declaringType.fullName);
???}
??? return null;
??}
??/**
?? *?
?? * 根据类名查找类
?? * @params clazzName 例如:
?? *  com.company.domain.Person
?? * com.company.domain::Person
?? */?
??????? public function getClass(clazzName:String):Type
??{
???//獲取类的元数据對象 相等与Java 中Class
???var type:Type=Type.forName(clazzName);
????? return type;
??}
??/**
?? *?
?? * 根据类名查找类的所用的属性
?? *?
?? */?
??????? public function getFields(o:Object):void
??{
???var xml:XML=MetadataUtils.getFromObject(o);
???trace("xml" +xml);
???
???//獲取對象的類名信息
???? var clazz:Class=ClassUtils.forInstance(o);
???//得到反射类的對象
???var type:Type=Type.forInstance(o);
???//获取类中属性和变量
???var fields:Array=type.fields;
????? for(var i:int=0;i<fields.length;i++)
????? {?
????? ?var field:Field=fields[i] as Field;
????? ?if(field is Variable)
????? ?{
??????????? trace("Name ="+ field.name+" "+" Value="+field.getValue(o));?
????? ?}
????? }
??}
??/**
?? *?
?? * 根据类名查找类的所用的属性
?? */?
??????? public function existsField(o:Object,field:String):Object
??{
???//獲取對象的類名信息
????? var clazz:Class=ClassUtils.forInstance(o);
???//得到反射类的對象
?????? var type:Type=Type.forInstance(o);
?????? var vars:Array=type.variables;
???????
???//检测类中是否有某个属性
???if(clazz.hasOwnProperty(field))
???{
????var sfield:Field=type.getField(field);
????trace("Name ="+ sfield.name+" "+" Value="+sfield.getValue(o));?
???}else{
???? logger.info(" can't the {0} in the class of {1}",field,type.name);
???}
???return null;
??}
??/**
?? *?
?? * 根据类名查找类的方法
?? * @params clazzName 例如:
?? *  com.company.domain.Person
?? * com.company.domain::Person
?? */?
??????? public function getMethods(clazz:Class):Type
??{
???//得到反射类的對象
???var type:Type=Type.forClass(clazz);
???//var type:Type=Type.forClass(clazz);
???//获取类中属性
???var methods:Array=type.methods;
????? for(var i:int=0;i<methods.length;i++)
????? {?
????? ?var method:Method=methods[i] as Method;
???????? trace("Name ="+ method.name+" "+"return type="+method.returnType.name);?
????? }
????? return null;
??}
??/**
?? * 动态调用类中方法
?? */?
??? public? function invokeMethod(o:Object,method:String,args:Array=null):*
??? {
???? ?? //獲取类的元数据對象
???? ?? var type:Type=Type.forInstance(o);
???? ?? var data:*;
???? ?? //獲取类的方法
???? ?? var m:Method=type.getMethod(method);
???? ?? if(m!=null)
???? ?? {
???? ???? data=m.invoke(o,args);
???? ?? }
???? ?? return data;
??? ?}
??
?}
}

?

调用的test类如下:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"? initialize="init()" layout="absolute" xmlns:view="commons.*">
?<mx:Script>
??<![CDATA[
????? import model.Employee;
????? import commons.CommonRelection;
???public function init():void
???{
????? var a:CommonRelection=new CommonRelection();
????? var emp:Employee=new Employee();
????? a.existsField(emp,"empName");
????? a.getClass("model.Employee");
????? a.getClassInfo(Employee);
????? a.getFields(emp);
????? a.getMethods(Employee);
????? a.invokeMethod(emp,"setEmpName",["xiaobai"]);
????? trace(emp.getEmpName());
????? //com.company.domain.Person
???????? //com.company.domain::Person
??????
???}
??]]>
?</mx:Script>
</mx:Application>

?

转自:http://topmanopensource.iteye.com/category/71512?show_full=true

转自:

热点排行