技術分享 Flex4兼容模式如何移植到發布版本
本文和大家重點討論一下Flex4兼容模式移植到發布版本的問題
Flex4兼容模式移植到發布版本的問題
1.Flex4發布版本spark.swc默認不能使用兼容模式,編譯報錯。
2.在以前的兼容模式下,默認的主題spark能使用Halo主題的組件屬性,但在完全的Flex4編譯模式下不能使用。
(1)去掉組件中spake主題不存在的屬性,使用skinclass屬性,并編輯皮膚組件替代(但對于舊有的項目,顯然代價太大)
(2)改變項目默認的Spark主題,以前大多數的Halo主題屬性都能使用,不過像:<ns:canvaspaddingTop=""padding***="">就不能使用了,不過沒關系,一般在canvas組件中包含其它的框架組件就能解決。(工程量大大的減小了)
(3)如果是以后新建的組件***使用Spark組件構成,理論上設計與邏輯結構更為自由,不過得努力學習一下skin組件的使用方法了~(這對Developer來說,有點難過)
3.Flex4發布版的構建路徑中默認使用“運行時RSL方式”,但程序運行時報錯“ClassSparkSkin不能找到……”(頭暈>_<!!!)***使用“合并到代碼中”先解決問題,日后再解//TODO
4.附加編譯參數:-keep-all-type-selectors=true(這個是好東西,一直不清楚如何使用,得好好看看這方面的!!!)
不帶這個參數時,運行程序可能報無法找到×××組件外觀Error。煩死了開始時侯,一大堆組件外觀不見了。
5.無法解析的空對象……>_<!!!
在兼容模式下好好的程序放到Flex4下竟然出現一大堆莫名其妙的nullObject問題。原因可能是編譯機制的改變,使得運行時代碼執行順序發生改變而引起的(注意:只是可能,猜想!)
(1)狀態引起的空對象問題
有時候在父組件中使用到includein=“state”itemcreation=“imitation”
子組件使用了creationcomplete=“init()”
init()方法使用時機不好,子組件還沒創建好就執行了init()方法,暫時這樣解決:
父組件:includein=“state”itemcreation=“imitation”creationcomplete=“init()”(就是把子組件需要創建好后執行的方法放到帶狀態的父組件執行)
(2)Swc域引起的空對象問題
不明白Swc域的可以搜搜Applicationdomain我也解析不好。反正如果劃分了模塊的話就有能一起這樣的問題。由于每個編譯的swc文件運行時都有自己的一個域,主應用程序域和Module域,(主應用程序域中理論上應該創建好Module所需的數據,讓Module在需要的時候取得,但有時候Module就是拿不到,引起空對象)這時候只好在主應用程序中顯式聲明“傀儡類”>_<!!!//TODO
6.組件狀態顯示異常
又是Flex4—Release問題,當發現組件指定的狀態顯示不正確時,嘗試把組件的那個狀態放在<mx:states>聲明的***個位置,看看是不是正常了。(由狀態引起的問題確實令人抓狂>_<!!!)
7.組件狀態不顯示
假如6中的方法仍然沒有解決好問題,嘗試把狀態控制的去掉,使用屬性Visible=“isshow?true:false”控制,尤其建議使用在父組件和子組件都帶有狀態控制時,修改子組件的狀態控制。
8.綁定不是***的…………
當發現組件綁定的數據沒有問題,而組件卻問題大大時,手動代碼綁定試試!(簡直雷倒眾生>_<!)
余下的是spike問題
【編輯推薦】
- 解析Flex4的十大變化
- Flex4Beta引入新元素功能更強大
- Flex3到Flex4的轉變新特性值得關注
- FlexBuilder3.0與Eclipse3.4的***結合
- 從Flex3到Flex4的轉變一覽