探究Flex4重大變身
你對Flex4的變化是否了解,本文從較高層次審視了這個流行RIA框架的最新版,討論了其所發生的主要變化。相信本文介紹一定會讓你有所收獲。
Flex4的幾大變化
Adobe已經發布了Flex4(Gumbo)的首個官方beta版。該版本包含了眾多的變化。本文從較高層次審視了這個流行RIA框架的最新版,討論了其所發生的主要變化。
匯集最新Flash平臺技術相關資源,提供Flash平臺相關工具高速下載
1.集成AdobeCatalyst
Flex4的一個主要特性就是提供了對AdobeCatalyst(Adobe新的設計工具,用于創建富Internet應用而無需編寫代碼)集成的支持。Catalyst改變了開發者與設計者協作的方式,因為它清楚地知道應用開發者與設計者之間工作方式的顯著差異。這樣開發者與設計者都能專注于自己所擅長的領域,憑借Catalyst,無論開發者還是設計者都能按照自己所習慣的方式進行工作。Flex4中的很多變化都是圍繞著Flex與Catalyst的集成進行的。請查看AdobeCatalyst站點以了解其詳細信息。
2.Spark組件架構
Flex的每個版本都包含了完整的組件庫,其中含有用于構建應用的通用組件,如數據表格、按鈕及布局容器等等。Flex4的底層組件架構名為Spark,而在Flex3中則叫做Halo。為了支持Catalyst,Flex4更新了底層的組件模型以達到松耦合的目的。
在新的Spark組件模型中,核心邏輯、皮膚以及布局都被分開了,這樣我們就能單獨處理其中任意一部分而又不會影響到其他部分。Spark組件模型構建于Halo組件模型之上,這意味著Spark擴展了Halo的核心基類UIComponent,這樣我們就能以增量的方式使用Flex4,同時還能將Flex3組件應用在Flex4應用中。
除此以外,Flex4還對效果(effect)進行了增強。現在可以將效果應用在任意的對象和類型上,這么做提升了其靈活性。Flex4的效果由新的“spark.effects”包實現。就像新的組件庫一樣,Flex4的效果也被重新實現了,但卻并沒有對Flex3的效果進行任何變更,這么做的目的是為了保持向后兼容。請查看ChetHaase所寫的關于Flex4效果的文章或是其博客以更多地了解GumboEffect。
請閱讀白皮書以更多地了解Spark架構。
3.MXML2009
MXML基于XML,構建于FlashPlayer所用的編程語言——ActionScript3之上。MXML用于對用戶界面和支持工具(比如說IDE,現在是Catalyst了)的視圖區域進行布局。MXML2009包含了大量更新以對不同的行為(核心、皮膚和布局)進行解耦,同時還提供了新的組件庫。現在Flex4的組件在其自己的包中(spark.components)得以實現,同時又沒有對Flex3的組件進行任何變更,為此MXML2009專門提供了一個新的命名空間以提供支持。
下面的應用聲明示例展示了如何使用該命名空間以及如何為Spark和Halo組件定義命名空間:
- <s:Application
- xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- xmlns:mx="library://ns.adobe.com/flex/halo">
這樣,我們就可以通過下面的代碼聲明Flex4的Button:
- <s:Buttonlabels:Buttonlabel="MyFlex4Button"/>
下面的代碼聲明了Flex3的Button:
- <mx:Buttonlabelmx:Buttonlabel="MyFlex3Button"/>
請瀏覽MXML2009規范以深入了解其變化。
4.對ViewStates的改進
Flex2將狀態(states)概念引入到了Flex框架中,這樣我們就可以通過簡單的狀態改變來管理視圖組件的變化。Flex4改進了視圖狀態(viewstates)以簡化其語法,這樣我們就能更輕松地使用他們了。新語言屬性includeIn和excludeFrom就是簡化語法的一個例子,我們可以設定組件的這兩個屬性值以響應狀態變化(參見下面的代碼示例)。
- <!--GiventhestatesA,B,C-->
- <m:states>
- <m:Statenamem:Statename="A"/>
- <m:Statenamem:Statename="B"/>
- <m:Statenamem:Statename="C"/>
- </m:states>
- <!--ThisbuttonwillappearinonlystatesAandB-->
- <ButtonlabelButtonlabel="ClickMe"includeIn="A,B"/>
- <!--ThisbuttonwillappearinstatesAandB-->
- <ButtonlabelButtonlabel="ButtonC"excludeFrom="C"/>
【編輯推薦】