`
godlogin
  • 浏览: 24417 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

Flex学习笔记(二)

    博客分类:
  • 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数据对象。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics