今天(第九堂)有提到arrayCollection與[Bindable],翻翻之前寫的筆記感覺非常奇怪,來看看前面的描述:
課堂上曾經問過老師:array與arrayCollection的差異,結論是:如果需要進行資料繫結,那就將資料塞到ArrayCollection吧!如果不需要進行這樣的動作就兩個擇一即可,但是ArrayCollection會使用比較多的記憶體。
後來在敎內嵌圖片的時候,知道了[Bindable]標籤的意義,意義是:MateData標籤,告訴編譯器,之後資料改變要做動態Bind的動作。
看到這應該也會覺得有點混亂,依照[Bindable]標籤的意思,如果我對於Array型態標註[Bindable],那麼他應該要擁有動態Binding的能力才對?又或者ArrayCollection已經有資料繫結能力了,下標籤的意義是什麼?總之,我馬上就搞混了。XD
問了老師,結論是:[Bindable]可以告訴編譯器資料要作Bind的動作,但其資料形態是否可以進行動態的Binding則需要看該型態是否有相對應的方法,而Collection變數型別擁有判別資料繫結的能力;所以若是需要進行動態Binding的動作,就需要利用類似arrayCollection的Collection變數型別,且利用[Bindable]標籤告訴編譯器要做這件事情;所以即便[Bindable]標籤用在無法"動態"Binding的型別上(如array),當然還是無法進行所謂的"動態"。
那另一個問題又產生了,為什麼不下[Bindable]標籤,編譯器也可以正常運作進行Binding的動作,原因是Flex Builder會自行去尋找應該對應繫結的對象,但應該可以發現如果沒下[Bindable]標籤Flex Builder會給你一個警告。
所以最終結論:
1. 要繫結的資料應該下[Bindable]標籤讓編譯器知道該跟誰繫結。
2. 要動態繫結的資料應使用Collection系列。
3. Arrary要繫結就要下[Bindable]標籤,但要動態繫結時,因沒有對應的方法要自行用ActionScript進行。
4. ArrayCollection可以動態繫結,但是還是需要利用[Bindable]標籤告訴編譯器該資料要繫結。
[Bindable] 意思是表示該"變數"可以繫結
回覆刪除變數可以是 Object, Array, Number,...
但是不保證變數物件內的物件可以繫結
就是只有單層繫結意思
ArrayCollection 則是保證物件底下的資料也可以繫結
就是多層繫結意思