- 浏览: 137060 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
Ken艹小哲:
太赞了 哥们 加扣
猜数字问题的最少步数算法. -
chenyuan122912:
...
解决AS3 Socket编程中最令人头疼的问题 -
hyx0914:
有源代码打包下载的吗?
Flex地图分块加载的实现 -
tianhai110:
非常有价值的 测试总结
时间效率,Timer和EnterFrame在FP 10.1之后测试和建议 -
763675117:
你好,fengxiangpiao,看了你的文档,我的需求和你差 ...
解决MovieClip打印问题 转
在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):* 下面是我测试以上程序的Flex程序代码,大家可以参考:
{
var myBA:ByteArray = new ByteArray();
myBA.writeObject(source);
myBA.position = 0;
return(myBA.readObject());
}
<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网站
2011-10-15 23:18 722一、国外站点 1.资源 类Adobe Flex 2 ... -
时间效率,Timer和EnterFrame在FP 10.1之后测试和建议
2011-04-23 22:19 1056关于Timer还是EnterFrame的选择,一直是很 ... -
时间效率,Timer 和 EnterFrame 在 FP 10.1 之后测试和建议
2011-04-23 22:16 1059关于Timer还是EnterFrame的选择,一直是很多AS3 ... -
Socket粘包问题
2011-04-22 23:21 1027这些天做类似QQ空间的 ... -
关于Flash Socket通信的安全策略问题的一点心得
2011-04-22 22:36 697昨天做测试的时候遇到 ... -
FLEX入门实例--------FLEX全屏功能实现及右键菜单
2011-03-26 11:58 815FLEX的全屏功能的实现,光写AS还不够,还需要对JS部分做一 ... -
flex中的Text属性
2010-12-08 12:31 871不同于Lable只显示单行文本,Text可以显示多行文本, ... -
Flex跨域问题
2010-11-08 17:55 790From ESRI: The client brow ... -
Flex屏蔽并自定义鼠标右键菜单(转载)
2010-11-08 17:53 877最近手头有个项目需要屏蔽Flex鼠标右键菜单并自定义新的fle ... -
使用 IBM Rational Functional Tester 7.0.1 测试 Flex 应用程序
2010-11-05 21:45 838关于这篇文章必要的信息 这篇文章假定您已经对使用 IBM® ... -
在 Ajax 应用程序中实现实时数据推送
2010-11-05 21:40 666简介 Ajax 技术已经存在了一段时间,开发的动力已经真正开 ... -
使用 Flex 和 Dojo 开发交互式Web应用程序
2010-11-05 21:38 988引言 以用户体验为核 ... -
Flex 应用内存泄露的分析与诊断
2010-11-05 21:36 802引言 Flex 采用 ActionScrip ... -
flex SystemManger
2010-11-05 16:35 689软件编程牛人网 Framework Fundamentals ... -
Flex 不同 application 之间传参数
2010-11-05 16:33 486软件编程牛人网 通过主影片来获得所有子影片的systemma ... -
如何在flash保留小数位
2010-11-04 20:07 823在家上网赚钱更容易 fl ... -
实例讲解Flex3的SharedObject对象用法
2010-11-04 16:01 757在家上网赚钱更容易 Flex中的SharedObj ... -
Flex中12个最基本、最简单但却最有用的函数
2010-11-04 15:54 689在家上网赚钱更容易 No.1 复制内容到剪贴板 S ... -
flex中的拖放操作(一)
2010-11-04 15:47 929在家上网赚钱更容易 可视化的开发环境最大的特点是允许你在 ... -
flex中的拖放操作(二)
2010-11-04 15:46 768在家上网赚钱更容易 手动添加 drag-and-drop ...
相关推荐
另一方面,如果从服务器接收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中,数据绑定允许我们将界面组件(如按钮、文本输入框等)的状态直接与应用程序的数据模型...