2010年7月2日 星期五

Flex_Array與ArrayCollection的差異

星期二過完又很快到了星期四,又來到一星期兩次的Flex時間,吃了還不錯的羊肉麵跟水煎包(肉的比較好吃),又開始3.5小時的課程,其實3.5小時說長不長,但是講起課來還真的是充充實實,好險當時沒有選假日班,不然真塞到爆炸。

第四堂基本上有三個比較值得紀錄的東西,一個就是本篇的標題,另一個是物件導向的最後一些觀念,另一個就是Flex的重頭戲「事件」,但是事件一整個很大,所以下一堂課應該還是講事件吧!

好!本篇的重點,Array與ArrayCollection的差別。
之前上課時有簡單介紹ArrayCollection的用法,那時候並沒有覺得哪裡奇怪,想說ArrayCollection就是Flex裡面存放資料的陣列,完全忘記Array的存在。但在昨天的課程中就應用了Array及ArrayCollection完成了一個簡單的資料處理的程式,先來看看程式碼做了什麼事情?
1.裡面令了三個ArrayCollection與一個Array。
2.將三個DataGrid的dataProvider設為第一步驟令的ArrayCollection。
3.將要放入的資料利用Array.push的指令放入Array理面儲存。
4.依照類別利用ArrayCollection.additem指令放入ArrayCollection裡面。

所以整件事情就是把資料塞到Array,再把資料塞到ArrayCollection,然後在DataGrid裡面顯示。講起來非常的流暢,感覺完全沒有問題。如果觀察程式碼可以發現,Array裡面所儲存的也是物件,也就是我們事先撰寫好的Product、Book與Monitor三個Class,而ArrayCollection裡面也是存放物件,也就是Array[i]裡面的內容,所以....也是Product、Book與Monitor,那整件事情就變的有點怪異,沒道理要用兩個功能類似的陣列型態吧?

當然不可能是這樣,所以Array跟ArrayCollection是不同的,當然在這邊也沒有要探討很深層的不同點,只是需要一個理由讓自己以為自己知道他的不同,主要要判斷何時用哪種的癥結點只有一個。

就是看你要不要資料繫結,ArrayCollection有許多已經完成的事件,而這些事件主要在處理「當內容改變時,設定dataProvider的物件將會同步變化」,也就是DataBind的概念,所以ArrayCollection就提供了許多良好的存取方法,例如:Additem等。而Array是屬於較為輕量的一種型態,雖然可以被設定為dataProvider,但是對於資料變更後的動態改變就必須要自行去撰寫。

所以結論:如果需要進行資料繫結,那就將資料塞到ArrayCollection吧!如果不需要進行這樣的動作就兩個擇一即可,但是ArrayCollection會使用比較多的記憶體。

沒有留言:

張貼留言