Flex学习笔记(二)

学习在一点点进行,虽然战线长了点,但学了总比没学强!

早上醒来看了会actionScript3 ,有几个地方要记下,以后注意不要弄错了:(学习文档:《Flex与ActionScript程序开发》)

1、检测ArrayCollection是否存在某对象:
要检查ArrayCollection中是否存在复杂对象,需要比较两个对象的值,例如:

private function checkItem():int{
var i:int;
var arr:Array = AC.source;
while(i<arr.length){
if (arr[i].name == nameTI.text && arr[i].age == ageTI.text){
return i;
}
i ++;
}
return -1;
}

不能用:

AC.contains({name:nameTI.text,age:Number(ageTI.text)})



AC.getItemIndex({name:nameTI.text,age:Number(ageTI.text)})

因为contains和getItemIndex方法都是比较对象的指针,而不是值。


2、强类型与弱类型的数据复制
弱类型使用等号将值赋给另一个变量就可以,但强类型直接等号赋值仅仅是为新对象创建了一个指针。当源数据变化时,复制的对象也会变化。例如

var objOne:Object = {name:"abc",data:{first:"a",second:"bc"}};
var objTwo:Object = objOne;
objOne.data.first="d";//对原始对象的修改,也会在新对象反应出来
Alert.show(objTwo.data.first);//输出 d


正确的做法是用mx.utils.ObjectUtil类得copy方法。该方法接受一个对象作为参数,而返回一个内在的新位置的对象的深度复制而不是复制指针。如:

var objOne:Object = {name:"abc",data:{first:"a",second:"bc"}};
var objTwo:Object = ObjectUtil.copy(objOne);
objOne.data.first="d";//不会影响第二个
Alert.show(objTwo.data.first);

对于某一具体集合类型可以用:

var AC2:ArrayCollection = ObjectUtil.copy(AC1) as ArrayCollection;
var xmlData2:XML = ObjectUtil.copy(xmlData1) as XML;


如果一个复杂的ArrayCollection数据是用object对象构建出来的(为object的属性赋值并使用ArrayCollection的addItem方法添加),那么使用上述方法得到的复制数据有可能不是预期的值。这时就要使用复制数据的另一个方法:遍历原数据,循环创建object并为属性赋值,使用addItem方法构建另一个ArrayCollection数据对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值