`
lp895876294
  • 浏览: 285562 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Flex自动填充属性值

 
阅读更多

一直在做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,target,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,targetObject: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] ;  
			}  
		}
		
	}
}

 

分享到:
评论

相关推荐

    flex属性演示.rar

    可选值包括`flex-start`(靠顶),`flex-end`(靠底),`center`(居中),`baseline`(基线对齐)和`stretch`(拉伸,填充整个容器)。 5. `align-content`: 当有多行Flex项目时,这个属性用于控制行之间的对齐...

    flex组件样式属性中文对照表

    根据给定文件中的标题、描述、以及部分内容,我们可以整理出一系列与Flex组件样式属性相关的知识点。以下是基于这些信息的关键知识点汇总: ### Flex组件样式属性中文对照表 #### 一、主题颜色(Theme Color) - ...

    划分flex页面布局

    /* 自动填充剩余空间 */ } .center { width: 200px; /* 固定宽度 */ } ``` 五、浏览器兼容性 虽然Flex布局在现代浏览器中得到了广泛支持,但在旧版本的IE中可能存在问题。确保使用前检查兼容性,并考虑使用 ...

    flex css 模版经典

    - 自动填充网格:在不固定列数的网格系统中,Flexbox能自动填充空白区域。 - 对齐和间距控制:如居中对齐一个元素,或在一行中平均分配多个元素。 6. **压缩包文件解析** - `index.html`:这是网页的入口文件,...

    基本布局_flex基本布局模板_flex_

    Flex布局是CSS3中引入的一种新的布局模式,它使得容器能够调整其子元素的宽度、高度以及顺序,以最佳方式填充可用空间。这在处理不同屏幕尺寸和设备类型时尤其有用,因为它们可以自适应地调整布局。 1. **容器属性*...

    flex aladino 图片展示特效

    在"Aladino"图片展示特效中,主要利用了以下Flex布局的关键属性: 1. `display: flex`:将容器设置为Flex容器,使得子元素可以按照Flex布局规则排列。 2. `flex-direction`:定义主轴的方向,原示例中可能是设置为`...

    微信小程序 Flex布局详解

    弹性因子(flex-grow, flex-shrink, flex-basis)在微信小程序的Flex布局中,每个伸缩项目都可以通过flex属性来指定其弹性因子,它是一个简写属性,可以设置三个值:flex-grow, flex-shrink, 和 flex-basis。1. flex...

    flexweb布局

    align-items属性用于设置沿交叉轴对齐的方式,类似于justify-content在主轴上的作用,可选值有flex-start、flex-end、center、baseline和stretch(默认,拉伸至填充整个交叉轴)。 8. 单独项目的对齐 align-self...

    02-flex布局.pdf

    align-items属性决定了flex项目在交叉轴上的对齐方式,它默认值为stretch,意味着项目会自动填充容器的高度。其他值包括flex-start、flex-end、center和baseline。每个值都定义了不同的对齐行为,比如与交叉轴的起始...

    Flex中背景平铺的做法

    在`updateDisplayList`方法中,我们首先清空图形上下文,然后创建一个`BitmapFill`实例,并设置其源为样式中的`backgroundImage`属性值。之后,使用`begin`方法开始填充,通过`drawRect`绘制矩形区域,并最终用`end`...

    flex 组件的样式属性整理

    通过设置一个基础颜色,Flex会自动计算出一系列的配色方案,并应用于组件的边框、背景等元素上。 - **示例**:假设你设置了 `themeColor="#ff0000"`,那么该组件的所有样式都将基于红色进行变化。 #### Application...

    flex自定义创建css样式

    4. `align-items`: 设置侧轴上的对齐方式,与`justify-content`类似,但作用于侧轴,可选值有`flex-start`、`flex-end`、`center`、`baseline`(基线对齐)和`stretch`(默认,拉伸填充整个容器)。 5. `align-...

    详解css3 flex弹性盒自动铺满写法

    在flex布局中,当需要某个子项填充额外空间时,可以使用flex属性。flex属性是一个简写属性,用于设置flex-grow、flex-shrink和flex-basis三个属性的值。具体来说,flex-grow决定了如果存在可用空间时,子项如何增长...

    flex官方文档

    2. **子元素属性**:`flex-basis`(初始大小)、`flex-grow`(放大比例)、`flex-shrink`(缩小比例)和`flex`(简写属性,同时设置三个值)控制子元素在容器内的伸缩行为。`order`属性则允许改变子元素的默认显示...

    Flex2PrimitiveExplorer.rar_flex

    在Flex2PrimitiveExplorer中,我们可能会看到数据绑定如何工作,以及如何通过修改属性值实时更新组件的显示。 总的来说,《Flex2PrimitiveExplorer.rar_flex》提供的这个工具对于深入理解Flex2框架、掌握其组件特性...

    flex主题(34个)

    2. 填充:使用`justify-content`属性控制元素在主轴上的对齐方式,如`flex-start`(靠左/上)、`flex-end`(靠右/下)、`center`(居中)、`space-between`(两端对齐,项目之间等距)和`space-around`(每个项目...

    携程首页(flex布局-移动端)

    4. `align-items`:控制伸缩项在侧轴上的对齐方式,可选值有`stretch`(默认,填充整个侧轴)、`flex-start`、`flex-end`、`center`和`baseline`。 5. `justify-content`:控制伸缩项在主轴上的对齐方式,可选值有`...

    第29章 CSS3弹性伸缩布局[下].pdf

    3. Flex方向控制:flex-direction属性用于控制flex项目的排列方向,其属性值包括row(从左到右)、row-reverse(从右到左)、column(从上到下)和column-reverse(从下到上)。通过设置flex-direction属性,可以...

    详解CSS中的flex容器与flex属性

    旧版本的属性值,如`box`和`inline-box`,是早期草案中的语法,现在已经过时,不推荐使用。 **2. Flex子元素** flex容器内的每一个子元素都是一个flex子元素。如果容器内包含文本,文本也会被视为匿名的flex子元素...

Global site tag (gtag.js) - Google Analytics