加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex自动填充属性值

发布时间:2020-12-15 03:44:42 所属栏目:百科 来源:网络整理
导读:一直在做ArcGIS for flex的开发,在BaseWidget中总是根据XML的属性填充对象的属性值,或根据对象的属性值填充新的对象,总是写这些产生特别多的相似代码块。 设计了一个Util类,实现功能包括: 1.根据xml属性填充对象的属性; 2.根据已与对象的属性填充新对

一直在做ArcGIS for flex的开发,在BaseWidget中总是根据XML的属性填充对象的属性值,或根据对象的属性值填充新的对象,总是写这些产生特别多的相似代码块。

设计了一个Util类,实现功能包括:

1.根据xml属性填充对象的属性;

2.根据已与对象的属性填充新对象的属性。

代码如下:

package com.common
{
	import mx.controls.Alert;
	import mx.utils.ObjectUtil;

	public class ClassUtil
	{
		public function ClassUtil(){
		}
		/**
		 * 拷贝source中的属性到target,其中source可以是xml或object对象
		 */
		public static function copyProperties(source:Object,target:Object,ignoreFields:Array=null):void{
			if(source==null||target==null){
				return ;
			}
			if(source is XML){
				copyXMLProperties(source as XML,target,ignoreFields) ;
			}else{
				copyObjectProperties(source,ignoreFields) ;
			}
		}
		/** 
		 * 使用paramXML中属性到classObject对象中
		 */  
		public static function copyXMLProperties(paramXML:XML,targetObject:Object,ignoreFields:Array=null):void{  
			if(targetObject==null||paramXML==null){  
				return ;  
			}  
			for each (var key:XML in paramXML.attributes()){  
				//忽略不需要替换的字段,或在classobject中没有的属性
				if(!targetObject.hasOwnProperty(key.name())||
					(ignoreFields!=null&&ignoreFields.indexOf(String(key.name()))>-1)){
					continue ;
				}
				var propertyName:String = String(key.name()) ;
				
				var value:String = String(paramXML.@[propertyName]) ;  
				//分别对基本类型进行处理  
				switch((typeof targetObject[propertyName])){  
					case "boolean":{  
						if(value.toUpperCase()=="TRUE"){  
							targetObject[propertyName] = true ;  
						}else{  
							targetObject[propertyName] = false ;  
						}  
						break;  
					}  
					case "number":{  
						targetObject[propertyName] = Number(value);  
						break;  
					}  
						
					default:{  
						targetObject[propertyName] = value ;  
						break;  
					}  
				}  
			}  
		}  
		/** 
		 * 获取某个对象的属性名称 
		 */  
		public static function getObjectProperties(object:Object):Array{  
			if(object==null){  
				return null ;  
			}  
			var propertyArray:Array = ObjectUtil.getClassInfo(object).properties as Array;  
			
			if(propertyArray==null){  
				return null;  
			}  
			
			var targetFieldNames:Array = [] ;  
			
			for each (var property:Object in propertyArray) {  
				targetFieldNames.push(String(property.localName));  
			}  
			
			return targetFieldNames ;  
		}  
		/** 
		 * 将源对象的所有属性复制到目标对象中的同名属性中,必须保证同名属性的类型相同 
		 */  
		public static function copyObjectProperties(sourceObject:Object,ignoreFields:Array=null):void{  
			if(sourceObject==null||targetObject==null){  
				return ;  
			}  
			var properties:Array = getObjectProperties(sourceObject);  
			
			if(properties==null){  
				return ;  
			}  
			var tempName:String = null ;  
			while(properties.length>0){  
				tempName = properties.pop() as String ;  
				//过滤targetObject没有的属性或设置忽略的字段
				if(tempName==null || !targetObject.hasOwnProperty(tempName)||(ignoreFields!=null&&ignoreFields.indexOf(tempName)>-1)){
					continue ;
				}
				targetObject[tempName] = sourceObject[tempName] ;  
			}  
		}
		
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读