集合(ArrayCollection)的复制
利用Flex SDK自带的mx.utils.ObjectUtil类的copy方法就可以复制集合,
但复制后的集合无法识别里面数据的数据类型,这里需要利用 flash.net.registerClassAlias方法
对集合里德数据类型进行注册。具体方法如下:
/** * 复制对象,对象属性中可以是对象,对象中的对象如果未初始化则无法注册类型。 * @param objToCopy 要复制的对象 * @param registerAlias 是注册数据类型 * @return 转换后的对象 * * objToCopy[arr[i]]所指向的对象没有初始化时,objToCopy[arr[i]] is Object返回是false,否则返回true */ public static function copyOverObject(objToCopy:Object, registerAlias:Boolean = false):Object { if (registerAlias) { var className:String; var arr:Array = ObjectUtil.getClassInfo(objToCopy).properties; for(var i:int = 0;i<arr.length;i++) { if( objToCopy[arr[i]] is String|| objToCopy[arr[i]] is int|| objToCopy[arr[i]] is uint|| objToCopy[arr[i]] is Number|| objToCopy[arr[i]] is Boolean) continue; try { className = ObjectUtil.getClassInfo(objToCopy[arr[i]]).name; registerClassAlias(className,getDefinitionByName(className) as Class) } catch(e:Error) { //objToCopy[arr[i]]==null; //trace("属性:"+arr[i]+" 值为null,无法注册类型!"); } } className = getQualifiedClassName(objToCopy); registerClassAlias(className,getDefinitionByName(className) as Class); } return ObjectUtil.copy(objToCopy); }
说明:
这个方法能复制的对象的属性可以是一个复杂的对象类型,如:
o = {};
o.p={"a":"b","c":"d"};//可以复制对象o
但此对象属性的属性不能再是复杂的对象类型,将无法复制,如:
o = {};
t = {{"x":1},"y":2};
o.p=t;//无法复制对象o
想要复制后面一种情况可以换一种思路去解决,后面再贴了!有了上面的方法,要复制集合就很简单了。
1。将集合的source属性(一个数组)取出,遍历复制数组中的每个元素,并生成一个新的数组。
2。定义个新的集合,将上面的新数组赋值给新集合的source属性。
作者:ywxgod
E-mail:给我发邮件
出处:http://ywxgod.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
E-mail:给我发邮件
出处:http://ywxgod.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。