Flex ArrayCollection类用法详解

本文和大家重点学习一下Flex ArrayCollection的概念,经常被使用的两个集合类型是ArrayCollection类XMLListCollection类。ArrayCollection是Array的包装类,提供更方便的如添加和移除数据项以及能够创建游标启用要轻松地存储数组中的最后读取的位置等方法。

Flex ArrayCollection详解

集合是ActionScript中功能强大的基于索引的数组组件,添加了如对内容进行排序等功能,操作数组的读取位置,创建经过排序的数组视图。集合也能通知其任意事件监听器监听其数据是否改变,以及任何数据项被添加到源数组时可执行自定义逻辑。当数据改变时可通知其监听器,这是集合的新功能,叫数据绑定,还有就是允许DataGrid和List组件对其内容进行排序和过滤。集合是使用数据驱动控件以及从数据库返回的服务器端服务的重要内容。

经常被使用的两个集合类型是Flex ArrayCollection类XMLListCollection类。ArrayCollection是Array的包装类,提供更方便的如添加和移除数据项以及能够创建游标启用要轻松地存储数组中的最后读取的位置等方法。而XMLListCollection是XML对象的包装类,提供的功能有:根据索引访问数据,添加新对象以及游标等方法。XMLListCollection对于处理XML对象以及经常需要解析XML为数组时特别有用。
使用addItemAt或addItem方法插入对象到ArrayCollection,getItemIndex或contains方法用于检测数据项是否已存在于数组中,而ArrayCollection的sort属性是对ArrayCollection排序以及通过某个字段决定接收第一个或最后一个数据。

 

 
  
  1. 1.<mx:Script> 
  2. 2. 
  3. 3.importmx.collections.SortField;  
  4. 4.importmx.collections.Sort;  
  5. 5.importmx.collections.ArrayCollection;  
  6. 6.privatevarcoll:ArrayCollection;  
  7. 7.privatefunctioninit():void{  
  8. 8.coll=newArrayCollection(  
  9. 9.[{name:"MartinFoo",age:25},  
  10. 10.{name:"JoeBar",age:15},  
  11. 11.{name:"JohnBaz",age:23}]);  
  12. 12.}  
  13. 13.要插入元素到指定位置,可使用addItemAt方法:  
  14. 14.privatefunctionaddItem():void{  
  15. 15.coll.addItemAt({name:"JamesFez",age:40},0);  
  16. 16.}  
  17. 17.]]> 
  18. 18.mx:Script> 
  19.  

Sort对象提供findItem方法用于搜索这个ArrayCollection中的所有元素。方法原型如下:
 

 
  
  1. publicfunctionfindItem(items:Array,values:Object,mode:String,  
  2. returnInsertionIndex:Boolean=false,compareFunction:Function=null):int 

Value参数可以是包含属性和所需值的任何对象。Mode字符串可以是Sort.ANY_INDEX_MODE,表示返回任何匹配项索引,Sort.FIRST_INDEX_MODE表示返回第一个匹配项索引,Sort.LAST_INDEX_MODE表示返回最后一个匹配项索引。

returnInsertionIndex参数表示如果该方法找不到由values参数标识的项目,并且此参数为true,则findItem()方法将返回这些值的插入点,也就是排序顺序中应插入此项目的。
compareFunction设置用于查找该项目的比较运算符函数.
使用Sort对象的findItem方法代替上面的方法:
 

 
  
  1. 1.privatefunctioncheckExistence():int{  
  2. 2.varsort:Sort=newSort();  
  3. 3.returnsort.findItem(coll.source,  
  4. 4.{name:nameTI.text,age:Number(ageTI.text)},  
  5. 5.Sort.ANY_INDEX_MODE);  
  6. 6.}  

首先要创建一个Sort,传递一个SortField对象数组给fields属性。这些SortField对象包含的字符串正是每个Flex ArrayCollection元素将要用来排序的属性。如要对每个对象的age属性进行排序,创建Sort对象,传递SortField,设置排序字段为age:
 

 
  
  1. 1.privatefunctiongetOldest():void{  
  2. 2.varsort:Sort=newSort();  
  3. 3.sort.fields=[newSortField("age",false)];  
  4. 4.coll.sort=sort;  
  5. 5.coll.refresh();  
  6. 6.trace(coll.getItemAt(0).age+""+coll.getItemAt(0).name);  
  7. 7.}  

过滤 Flex ArrayCollection

对Flex ArrayCollection数据进行过滤,设置过滤器移除些不匹配的结果。
将原型为function(item:Object):Boolean的函数传递给ArrayCollection的filter属性。如果返回true表示值继续留在ArrayCollection,返回false表示其值被移除。

filterFunction属性是由ListCollectionView类定义,它是ArrayCollection的父类。当过滤器函数被传递给继承自ListCollectionView的任何子类后,这里为ArrayCollection对象,应用过滤器后必须调用refresh方法:
 

 
  
  1. 1.importmx.collections.ArrayCollection;  
  2. 2.privatevarcoll:ArrayCollection;  
  3. 3.privatefunctioninit():void{  
  4. 4.coll=newArrayCollection([  
  5. 5.{name:"MartinFoo",age:25},  
  6. 6.{name:"JoeBar",age:15},  
  7. 7.{name:"JohnBaz",age:23},  
  8. 8.{name:"MattBaz",age:21}]);  
  9. 9.coll.filterFunction=filterFunc;  
  10. 10.coll.refresh();  
  11. 11.for(vari:int=0;i<coll.length;i++){  
  12. 12.trace(coll.getItemAt(i).name);  
  13. 13.}  
  14. 14.}  
  15. 15.privatefunctionfilterFunc(value:Object):Object{  
  16. 16.if(Number(value.age)>21){  
  17. 17.returntrue;  
  18. 18.}rreturnfalse;  
  19. 19.} 

你可能感兴趣的:(as3&flex)