5 月
24
2009

Array 與 ArrayCollection 的差別

這是我在網路上找到的介紹

說明白一點就是Array不具有data binding的功能,而ArrayCollection有,但我大多都是用Array來作為UI物件的dataprovider,結果也是可以binding的!?當然或許我有重新賦值所以其實不算binding

 

經過觀察API結構後發現,Array並沒有addEventListener的功能

而ArrayCollection因為繼承了ListCollectionView,所以有了addEventListener的功能

這代表當我們替ArrayCollection加上[Bindable]標籤時,

編譯器自動幫我們做了監聽CollectionEvent.COLLECTION_CHANGE事件的動作

但Array就沒辦法監聽事件

不過有趣的是,ListCollectionView並不是因為實做IEventDispacher介面而有addEventListener功能,而是他自己定義了個同名的function…

 

API裡面的addEventListener並沒有繼承的小箭頭

 

廢話了一大堆,總言之,作為UI物件的dataprovider,我們盡量用ArrayCollection 就是了

下面是一個小實驗

 

這是使用Array作為dataprovider,各位可以在click那邊設定中斷點觀察,其實值是有加進去的,但是就算在宣告時打了Bindable,結果UI物件還是沒有更新

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
      <mx:Script>
          <![CDATA[
                import mx.collections.ArrayCollection;
              [Bindable]
              private var myArray:Array = new Array();
          ]]>
      </mx:Script>
      <mx:TextInput id="input" text="Item"/>
      <mx:Button click="myArray.push({label:input.text})" label="Add"/>
      <mx:List dataProvider="{myArray}"/>
</mx:Application>

 

這邊改為ArrayCollection就可以了

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
      <mx:Script>
          <![CDATA[
                import mx.collections.ArrayCollection;
              [Bindable]
              private var myArray:ArrayCollection= new ArrayCollection();
          ]]>
      </mx:Script>
      <mx:TextInput id="input" text="Item"/>
      <mx:Button click="myArray.addItem({label:input.text})" label="Add"/>
      <mx:List dataProvider="{myArray}"/>
</mx:Application>

Written by in: 電腦三兩事 | 標籤:

尚無留言 »

RSS feed for comments on this post. TrackBack URL


Leave a Reply

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com