- 浏览: 131559 次
- 性别:
- 来自: 济南
文章分类
最新评论
在Flex的开发过程中,常常会遇到复制ArrayCollection的情况。以前只是从网上找个方法拿来就用,也没有具体的搞清楚所以然来。今天有时间,研究了一下,总结如下:
Flex中的复制同java一样,也分为深复制和浅复制。(如果您对java的深复制和浅复制理解不深的话,可以参考我前一篇文章:JAVA中浅复制与深复制)
下面总结一下ArrayCollection的浅复制,共有4种方法:
1、var newArray:ListCollectionView=new ListCollectionView(ListCollectionView(oldArray).list);
2、var newArray:ArrayCollection=new ArrayCollection(oldArray.source);
3、var newArray:ArrayCollection=new ArrayCollection(oldArray.source.slice());
4、var newArray:ArrayCollection=new ArrayCollection(oldArray.toArray());
以上方法中,第一种方法由于不是创建的独立的ArrayCollection对象,所以不推荐使用。第二、三、四种方法相似,可以参考使用。
有的时候,我们也会用到深复制,方法如下:
var newArray:ArrayCollection=ArrayCollection(this.clone(oldArray));
this.clone()方法定义如下:
function clone(source:Object):*
{
var myBA:ByteArray = new ByteArray();
myBA.writeObject(source);
myBA.position = 0;
return(myBA.readObject());
}
下面是我测试以上程序的Flex程序代码,大家可以参考:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()" layout="absolute"> <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.collections.ListCollectionView; import mx.controls.Alert; import flash.utils.ByteArray; public function initApp():void { } //开始测试: //浅复制1 private function test1():void { //初始化需要的对象 var obj1:Object=new Object();//定义对象obj1 var obj11:Object=new Object();//定义对象obj1的引用对象obj11 obj1.name="obj1.name"; obj1.sub=obj11;//obj1的sub属性引用obj11 obj11.name="obj11.name"; //实例化ArrayCollection对象,并将obj1添加进该对象 var oldArray:ArrayCollection=new ArrayCollection(); oldArray.addItem(obj1); //浅复制ArrayCollection var newArray:ListCollectionView=new ListCollectionView(ListCollectionView(oldArray).list); //修改obj11.name的值 obj11.name="obj11.name is changed!"; //输出复制前后的两个对象所引用的obj11对象的name属性值,如一致为浅复制,不一致为深复制 Alert.show(oldArray.getItemAt(0).sub.name+"---"+newArray.getItemAt(0).sub.name); } //浅复制2 private function test2():void { //初始化需要的对象 var obj1:Object=new Object();//定义对象obj1 var obj11:Object=new Object();//定义对象obj1的引用对象obj11 obj1.name="obj1.name"; obj1.sub=obj11;//obj1的sub属性引用obj11 obj11.name="obj11.name"; //实例化ArrayCollection对象,并将obj1添加进该对象 var oldArray:ArrayCollection=new ArrayCollection(); oldArray.addItem(obj1); //浅复制ArrayCollection var newArray:ArrayCollection=new ArrayCollection(oldArray.source); //修改obj11.name的值 obj11.name="obj11.name is changed!"; //输出复制前后的两个对象所引用的obj11对象的name属性值,如一致为浅复制,不一致为深复制 Alert.show(oldArray.getItemAt(0).sub.name+"---"+newArray.getItemAt(0).sub.name); } //浅复制3 private function test3():void { //初始化需要的对象 var obj1:Object=new Object();//定义对象obj1 var obj11:Object=new Object();//定义对象obj1的引用对象obj11 obj1.name="obj1.name"; obj1.sub=obj11;//obj1的sub属性引用obj11 obj11.name="obj11.name"; //实例化ArrayCollection对象,并将obj1添加进该对象 var oldArray:ArrayCollection=new ArrayCollection(); oldArray.addItem(obj1); //浅复制ArrayCollection var newArray:ArrayCollection=new ArrayCollection(oldArray.source.slice()); //修改obj11.name的值 obj11.name="obj11.name is changed!"; //输出复制前后的两个对象所引用的obj11对象的name属性值,如一致为浅复制,不一致为深复制 Alert.show(oldArray.getItemAt(0).sub.name+"---"+newArray.getItemAt(0).sub.name); } //浅复制4 private function test4():void { //初始化需要的对象 var obj1:Object=new Object();//定义对象obj1 var obj11:Object=new Object();//定义对象obj1的引用对象obj11 obj1.name="obj1.name"; obj1.sub=obj11;//obj1的sub属性引用obj11 obj11.name="obj11.name"; //实例化ArrayCollection对象,并将obj1添加进该对象 var oldArray:ArrayCollection=new ArrayCollection(); oldArray.addItem(obj1); //浅复制ArrayCollection var newArray:ArrayCollection=new ArrayCollection(oldArray.toArray()); //修改obj11.name的值 obj11.name="obj11.name is changed!"; //输出复制前后的两个对象所引用的obj11对象的name属性值,如一致为浅复制,不一致为深复制 Alert.show(oldArray.getItemAt(0).sub.name+"---"+newArray.getItemAt(0).sub.name); } //深复制 private function test5():void { //初始化需要的对象 var obj1:Object=new Object();//定义对象obj1 var obj11:Object=new Object();//定义对象obj1的引用对象obj11 obj1.name="obj1.name"; obj1.sub=obj11;//obj1的sub属性引用obj11 obj11.name="obj11.name"; //实例化ArrayCollection对象,并将obj1添加进该对象 var oldArray:ArrayCollection=new ArrayCollection(); oldArray.addItem(obj1); //浅复制ArrayCollection var newArray:ArrayCollection=ArrayCollection(this.clone(oldArray)); //修改obj11.name的值 obj11.name="obj11.name is changed!"; //输出复制前后的两个对象所引用的obj11对象的name属性值,如一致为浅复制,不一致为深复制 Alert.show(oldArray.getItemAt(0).sub.name+"---"+newArray.getItemAt(0).sub.name); } //深复制调用的方法 function clone(source:Object):* { var myBA:ByteArray = new ByteArray(); myBA.writeObject(source); myBA.position = 0; return(myBA.readObject()); } ]]> </mx:Script> <mx:Button label="第一种浅复制方法" click="test1()" x="61" y="36"/> <mx:Button label="第二种浅复制方法" click="test2()" y="57" x="61" width="114"/> <mx:Button label="第三种浅复制方法" click="test3()" y="78" x="61" width="114"/> <mx:Button label="第四种浅复制方法" click="test4()" y="98" x="61" width="114"/> <mx:Button label="深复制方法" click="test5()" y="147" x="61"/> </mx:Application>
发表评论
-
Flex:使用@Embed嵌入元素
2010-08-04 16:57 1107可以在Flex应用程序中嵌入各种元素。被嵌入的元素将编译进SW ... -
连续滚动的图片效果
2010-01-25 14:37 1585思路是,把超出视觉范围 ... -
Flex PureMVC实例教程
2009-12-18 00:01 4280摘自: http://blog.csdn.net/ ... -
as3强大的正则表达式:RegExp
2009-12-04 15:20 956摘自: http://www.okp ... -
FLEX 3 新特性 (个人无责任猜想版)
2009-11-07 21:32 943http://www.unbuzz.com/blogs/ind ... -
Flex设置ToolTip样式
2009-10-25 13:33 1344StyleManager.getStyleDeclaratio ... -
Flex-DataGrid使用关键字过滤结果
2009-04-23 17:02 971这里主要展示如何使用搜索的关键字过滤DataGri ... -
你有所不知的HTML发布Flash的参数(一):allowScriptAccess
2009-04-13 10:22 1339摘自: http://www.luar.com.hk/flas ... -
firefox下js与flash通讯的可恶
2009-04-12 16:56 799http://www.laaan.cn/?p=682 -
flex creationComplete事件的一些思考
2009-03-29 21:39 1460creationComplete恐怕是flex ... -
flex初始化时的事件测试
2009-03-29 21:31 887flex组件在建立的时候都会经历四个事件:preinitial ... -
Flex locale ResourceBundle的使用
2009-03-25 15:47 3037ResourceBundle的使用 新建文件夹(Loca ... -
RangeError: Error #2006: 提供的索引超出范围
2009-03-18 11:18 3364如果你使用了PopUpManager.addPopUp添加弹出 ... -
TabNavigator使用心得
2009-03-17 10:58 1858做了一个控件很长时间,一直有两个问题困扰我。 1. ... -
Flex 数据绑定技巧
2009-03-16 21:19 826有一种简单的方法可以 ... -
Flex 程序的初始化顺序
2009-03-16 21:11 860Flex程序执行的过程中会触发 preinitialize, ... -
Application的启动顺序
2009-03-16 21:10 846preloader->systemManager-> ... -
Flex启动过程分析
2009-03-16 21:02 803首先介绍一下SystemManager. SystemMana ... -
Flex的crossdomain.xml问题
2009-03-09 13:04 3518玩过Flex或者Flash的同学都知道,如果想要在Flash里 ... -
FLEX内存优化
2009-03-06 13:17 928FLEX内存释放优化原则: ...
相关推荐
另一方面,如果从服务器接收XML数据,也可以通过反向操作将XML转换为ArrayCollection,以便在Flex或Flash应用中使用。 在实际项目中,你可能还需要考虑更多细节,如XML的命名空间管理、属性的添加以及错误处理等。...
Flex的Array和ArrayCollection
在Flex中,Tree组件是一种常用的控件,用于显示层次结构的数据。本篇文章将聚焦于如何将ArrayCollection转换为XML数据源,并实现Flex Tree组件的新增、删除和修改功能。以下是详细的解释和步骤。 首先,...
本文将详细探讨如何使用`ArrayCollection`作为Flex中的`Tree`控件的数据提供者,以替代通常使用的XML数据源。 首先,让我们理解`ArrayCollection`的概念。`ArrayCollection`是Flex中的一个类,它继承自`...
在IT行业中,ArrayCollection是ActionScript 3.0和Flex框架中的一个重要数据结构,它扩展了Array类,提供了对数据的双向绑定和事件通知功能。ArrayCollection不仅支持数组的操作,还具备列表的数据管理特性,因此在...
在Flex编程中,ArrayCollection是一种常用的集合类,它继承自Array类并添加了对数据绑定的支持。然而,尽管...通过对这些问题的深入理解和解决,可以更好地掌握Flex中的数据绑定和ArrayCollection的使用。
1. **定义数据模型**:在Flex中,数据通常是通过ArrayCollection或XMLListCollection等数据集合类来表示的。你需要创建一个包含复选框状态的属性,例如`isSelected`,并在数据项中设置这个属性。 2. **自定义列**:...
在Flex开发中,ArrayCollection是一种常用的集合类,它继承自Array并添加了对数据绑定和事件处理的支持。然而,当ArrayCollection应用了过滤器后,直接使用`removeItemAt()`方法尝试删除过滤后的数据可能会遇到问题...
本主题将深入探讨如何在Flex中实现组件DataGrid的数据导出功能,使其能够生成Excel文件供用户下载和处理。 DataGrid是Flex中常用的一个组件,它用于展示结构化数据,通常用于表格形式的展示。在Flex中,我们可以...
在Flex应用程序中,经常需要复制一个ArrayCollection对象,以便在不同的上下文中使用。使用`var bar:ArrayCollection = new ArrayCollection(); for each ( var i:Object in ac ){ bar.addItem( i ); }`语句可以实现...
本文旨在深入探讨Flex中的拖拽功能,包括其工作原理、关键概念、以及如何在实际项目中运用这些功能。 #### 拖放操作的三个阶段 拖放操作主要分为三个阶段:**初始化(Initiation)**、**拖动(Dragging)** 和 **...
在Flex中,可以通过ActionScript代码复制内容到剪贴板。使用System.setClipboard(strContent)方法,其中strContent是你想要复制到剪贴板的字符串内容。 2. 复制一个ArrayCollection 复制ArrayCollection对象时,...
ArrayCollection是Flex中的一个动态数组,它可以被用作各种UI组件的数据源。 集成流程大致如下: 1. 配置Myeclipse 9.0:确保已经安装了Flex SDK和BlazeDS插件,这样可以在IDE内创建Flex项目并与Java项目一起工作...
本文将详细讲解如何在Flex中的ComboBox中嵌入Checkbox,并探讨相关的技术细节。 首先,理解Flex的基础是关键。Flex是Adobe开发的一种基于ActionScript的开放源代码框架,用于构建富互联网应用程序(RIA)。它利用...
在Flex中,可以利用各种技术来实现与数据库的交互,包括操作本地SQL数据库。本篇文章将详细探讨Flex如何操作数据库,特别是针对本地SQL数据库的处理。 一、Flex与数据库连接 在Flex中,数据访问通常通过ADO.NET、...
4. **数据模型与视图**:在Flex中,数据模型与视图是分离的。当Checkbox的状态改变时,我们需要更新与之对应的树节点数据对象的属性,这样即使在数据刷新或重绘后,也能保持正确的选择状态。 5. **事件处理**:实现...
在本例中,"flex实时更新曲线图"涉及到的技术核心是Flex中的图表组件和数据驱动更新。 1. **Flex图表组件**:Flex提供了多种图表类型,包括折线图、柱状图、饼图等。曲线图,即折线图,用于展示数据随时间变化的...
在Flex中,`ArrayCollection`是用于管理列表数据的一种常见方式。它不仅提供了基本的数据存储功能,还支持事件通知、排序和过滤等功能,非常适合用作`List`组件的数据源。示例中的`myDP`变量即为一个`...
本篇文章将详细探讨如何在Flex中实现前台与后台的链接,并连接到数据库。 首先,我们需要了解Flex中的数据绑定机制。在Flex中,数据绑定允许我们将界面组件(如按钮、文本输入框等)的状态直接与应用程序的数据模型...