1.array做爲控件使用數組
FLEX3寫法:ide
<mx:Array id="barname">函數
<mx:String>Flash</mx:String>性能
<mx:String>Director</mx:String>測試
<mx:String>Dreamweaver</mx:String>flex
<mx:String>ColdFusion</mx:String>spa
</mx:Array>xml
FLEX4寫法:對象
<fx:Array id="barname">排序
<fx:String>Flex</fx:String>
<fx:String>Flash</fx:String>
<fx:String>Dreamweaver</fx:String>
</fx:Array>
舉例
<mx:LinkBar id="navigationBar" dataProvider="{barname}"/>
<mx:LinkBar id="navigationBar" dataProvider="barname"/>
注:寫{},則當barname數據的值修改後,linkbar的數據同步更新
2.array在程序中使用
[Bindable]
public var barname:Array=["Flex","Flash","Dreamweaver"];
<mx:LinkBar id="navigationBar" dataProvider="{barname}"/>
var barname:Array = new Array();
barname.push("Flex");
barname.push("Flash");
barname.push("Dreamweaver");
navigationBar.dataProvider = barname;
3.array的排序
private var temp:Array = new Array(1,4,3,45,4,6,7,77,9);
function sortArray(numbers:Array):Array{
numbers.sort(Array.NUMERIC);
return numbers;
}
4.ArrayCollection特色
ArrayCollection是flex中的數組集合類,它是很經常使用的,咱們使用它時須要注意幾個地方
(1)事件監聽
ArrayCollection能夠爲它註冊一個集合改變的監聽事件(CollectionEvent.COLLECTION_CHANGE),就是一旦 ArrayCollection數組改變就會觸發Event,不是全部狀況的改變都會觸發改變事件,若是集合當中的對象屬性沒有被綁定,那麼你改變它的對象值也是不會觸發事件的,在這種狀況下你也許可能須要去將對象的屬性進行綁定或者經過itemUpdated方法去管理對象值改變,除非集合的長度改變 了,事件纔會被觸發
(2)對象刪除
ArrayCollection的對象刪除方法removeAll(),有這樣一種狀況,當你在過濾集合數據的時候,它並不會刪除全部數據,而是刪除所有過濾的數據,不符合過濾條件的數據就沒被刪除,依然還在source中。
(3)過濾函數
ArrayCollection有個filterFunction過濾函數,就是可能集合中你只須要顯示其中某幾個對象,你將會須要根據對象條件篩選對 象,那麼你可能會用過濾函數,過濾函數會將不符合條件的對象過濾出來,可是ArrayCollection有個source屬性是不會變的,它是個數組, 全部源數據全在裏面,儘管你去過濾,全部對象都會一直存在其中
(4)排序
ArrayCollection還有一個sort屬性是用來排序的,你能夠爲其指定排序字段
5.ArrayCollection在程序中使用
(1)插入或刪除
import mx.collections.ArrayCollection;
private var coll:ArrayCollection;
coll = new ArrayCollection(
[{name:"Martin Foo", age:25},
{name:"Joe Bar", age:15},
{name:"John Baz", age:23}]);
}
要插入元素,可以使用addItemAt和addItem:
coll.addItemAt({name:"James Fez", age:40}, 0);
coll.addItem({name:"James Fez", age:40});
(2)搜索
Sort 對象提供findItem 方法用於搜索這個ArrayCollection 中的全部元素。
方法原型以下:
public function findItem(items:Array, values:Object, mode:String,
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 設置用於查找該項目的比較運算符函數.
舉例
private function checkExistence():int {
var sort:Sort = new Sort();
return sort.findItem(coll.source,{name:nameTI.text, age:Number(ageTI.text)}, Sort.ANY_INDEX_MODE);
}
(3)過濾
filterFunction 屬性是由ListCollectionView 類定義,它是ArrayCollection 的父類。
當過濾器函數被傳遞給繼承自ListCollectionView 的任何子類後,這裏爲ArrayCollection 對象,應用過濾器後必須調用refresh 方法
將原型爲function(item:Object):Boolean 的函數傳遞給ArrayCollection 的filter 屬性。若是返回true 表示值繼續留在ArrayCollection,返回false 表示其值被移除。
舉例:
private function init():void {
coll = new ArrayCollection([{name:"Martin Foo", age:25},{name:"Joe Bar", age:15},name:"John Baz", age:23},{name:"Matt Baz", age:21}]);
coll.filterFunction = filterFunc;
coll.refresh();
for(var i:int = 0; i<coll.length; i++) {
trace(coll.getItemAt(i).name);
}
}
private function filterFunc(value:Object):Object {
if(Number(value.age) > 21) {
return true;
}
return false;
}
(4)排序
首先要建立一個Sort,傳遞一個SortField 對象數組給fields 屬性。這些SortField 對象包含的字符串正是每一個ArrayCollection 元素將要用來排序的屬性。如要對每一個對象的age 屬性進行排序,建立Sort 對象,傳遞SortField。
設置排序字段爲age:
private function getOldest():void {
var sort:Sort = new Sort();
sort.fields = [new SortField("age")];
coll.sort = sort;
coll.refresh();
trace(coll.getItemAt(0).age+" "+coll.getItemAt(0).name);
}
先按name升序排序,再按age降序排序
sort.fields = [new SortField("age"),new SortField("age",true,true)];
API說明:
public function SortField(
name:String = null,
caseInsensitive:Boolean = false,
descending:Boolean = false,
numeric:Object = null)
參數
name:String (default = null) —此字段用來進行比較的屬性的名稱。若是該對象爲簡單類型,則傳遞 null。
caseInsensitive:Boolean (default = false) —在對字符串進行排序時,指示比較運算符是否忽略值的大小寫。
descending:Boolean (default = false) —指示比較運算符是否按降序排列項目。
numeric:Object (default = null) —指示比較運算符是否按編號而不按字母順序比較排序項目。
6.Array和ArrayCollection的比較
Array的優勢:
1)Array的性能優於ArrayCollection,從測試結果平均看來,ArrayCollection的效率是隨着object的數目呈線性下 降的,而Array則是體現了優異的效率,在object增長的狀況下,基本上沒有太大的變化。因此若是在你須要遍歷全部元素的狀況下(好比說物理引 擎,3D引擎等),Array是不錯的選擇
程序見附件1.
2)後臺JavaBean也用的是數組[]
3)for循環數組彷佛比for each ArrayConllection看起來更「傻瓜化」
4)給Array數組擴展長度,也能夠變通實現,並且代價並不大
ArrayCollection的優勢:
1)ArrayCollection 實現接口ICollectionView,在 Flex 的類定義內屬於[數據集],他提供更強大的檢索、過濾、排序、分類、更新監控等功能。相似的類還有 XMLListCollection
2)用 array 在做爲 dataProvider 綁定於 control 之上,就沒法得到控件的更新(實際上效果是能夠獲得更新的), 除非控件被從新繪製或者 data provider 被從新指定,而 Collection 則是將 array 的副本存儲於 Collection 類的某個對象之中,其特色是 Collection 類自己就具有了確保數據同步的方法,例子以下(取自 adobe 內部工程師 training 示例,稍有改變)
3)對ArrayCollection中的對象進行增長刪除更新操做時ArrayCollection會產生事件,能夠經過collectionchange事件監聽,因此在圖表開發中都用ArrayCollection作數據源,一旦有更新,就會反映在圖標上