一直在做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-start`(靠顶),`flex-end`(靠底),`center`(居中),`baseline`(基线对齐)和`stretch`(拉伸,填充整个容器)。 5. `align-content`: 当有多行Flex项目时,这个属性用于控制行之间的对齐...
根据给定文件中的标题、描述、以及部分内容,我们可以整理出一系列与Flex组件样式属性相关的知识点。以下是基于这些信息的关键知识点汇总: ### Flex组件样式属性中文对照表 #### 一、主题颜色(Theme Color) - ...
/* 自动填充剩余空间 */ } .center { width: 200px; /* 固定宽度 */ } ``` 五、浏览器兼容性 虽然Flex布局在现代浏览器中得到了广泛支持,但在旧版本的IE中可能存在问题。确保使用前检查兼容性,并考虑使用 ...
- 自动填充网格:在不固定列数的网格系统中,Flexbox能自动填充空白区域。 - 对齐和间距控制:如居中对齐一个元素,或在一行中平均分配多个元素。 6. **压缩包文件解析** - `index.html`:这是网页的入口文件,...
Flex布局是CSS3中引入的一种新的布局模式,它使得容器能够调整其子元素的宽度、高度以及顺序,以最佳方式填充可用空间。这在处理不同屏幕尺寸和设备类型时尤其有用,因为它们可以自适应地调整布局。 1. **容器属性*...
在"Aladino"图片展示特效中,主要利用了以下Flex布局的关键属性: 1. `display: flex`:将容器设置为Flex容器,使得子元素可以按照Flex布局规则排列。 2. `flex-direction`:定义主轴的方向,原示例中可能是设置为`...
弹性因子(flex-grow, flex-shrink, flex-basis)在微信小程序的Flex布局中,每个伸缩项目都可以通过flex属性来指定其弹性因子,它是一个简写属性,可以设置三个值:flex-grow, flex-shrink, 和 flex-basis。1. flex...
align-items属性用于设置沿交叉轴对齐的方式,类似于justify-content在主轴上的作用,可选值有flex-start、flex-end、center、baseline和stretch(默认,拉伸至填充整个交叉轴)。 8. 单独项目的对齐 align-self...
align-items属性决定了flex项目在交叉轴上的对齐方式,它默认值为stretch,意味着项目会自动填充容器的高度。其他值包括flex-start、flex-end、center和baseline。每个值都定义了不同的对齐行为,比如与交叉轴的起始...
在`updateDisplayList`方法中,我们首先清空图形上下文,然后创建一个`BitmapFill`实例,并设置其源为样式中的`backgroundImage`属性值。之后,使用`begin`方法开始填充,通过`drawRect`绘制矩形区域,并最终用`end`...
通过设置一个基础颜色,Flex会自动计算出一系列的配色方案,并应用于组件的边框、背景等元素上。 - **示例**:假设你设置了 `themeColor="#ff0000"`,那么该组件的所有样式都将基于红色进行变化。 #### Application...
4. `align-items`: 设置侧轴上的对齐方式,与`justify-content`类似,但作用于侧轴,可选值有`flex-start`、`flex-end`、`center`、`baseline`(基线对齐)和`stretch`(默认,拉伸填充整个容器)。 5. `align-...
在flex布局中,当需要某个子项填充额外空间时,可以使用flex属性。flex属性是一个简写属性,用于设置flex-grow、flex-shrink和flex-basis三个属性的值。具体来说,flex-grow决定了如果存在可用空间时,子项如何增长...
2. **子元素属性**:`flex-basis`(初始大小)、`flex-grow`(放大比例)、`flex-shrink`(缩小比例)和`flex`(简写属性,同时设置三个值)控制子元素在容器内的伸缩行为。`order`属性则允许改变子元素的默认显示...
在Flex2PrimitiveExplorer中,我们可能会看到数据绑定如何工作,以及如何通过修改属性值实时更新组件的显示。 总的来说,《Flex2PrimitiveExplorer.rar_flex》提供的这个工具对于深入理解Flex2框架、掌握其组件特性...
2. 填充:使用`justify-content`属性控制元素在主轴上的对齐方式,如`flex-start`(靠左/上)、`flex-end`(靠右/下)、`center`(居中)、`space-between`(两端对齐,项目之间等距)和`space-around`(每个项目...
4. `align-items`:控制伸缩项在侧轴上的对齐方式,可选值有`stretch`(默认,填充整个侧轴)、`flex-start`、`flex-end`、`center`和`baseline`。 5. `justify-content`:控制伸缩项在主轴上的对齐方式,可选值有`...
3. Flex方向控制:flex-direction属性用于控制flex项目的排列方向,其属性值包括row(从左到右)、row-reverse(从右到左)、column(从上到下)和column-reverse(从下到上)。通过设置flex-direction属性,可以...
旧版本的属性值,如`box`和`inline-box`,是早期草案中的语法,现在已经过时,不推荐使用。 **2. Flex子元素** flex容器内的每一个子元素都是一个flex子元素。如果容器内包含文本,文本也会被视为匿名的flex子元素...