Flex 4 SDK 新特性教程系列 – 改進的檢視狀態 (1)

來源:互聯網
上載者:User
文章目錄
  • Flex 3的檢視狀態(View States)
  • Flex 4:全新的檢視狀態文法

本章是Flex 4 SDK 新特性教程系列的第5章。本章將介紹Flex 4全新的檢視狀態文法。

 

Flex 3的檢視狀態(View States)

在此之前有多少人使用過檢視狀態?至少我沒用過。:P
下面是一個典型的例子:

<mx:states>     <mx:State name="State1">         <mx:SetStyle target="{btn}" name="color" value="0xAAAAAA"/>              <mx:SetProperty target="{btn}" name="enabled" value="false"/>         <mx:SetEventHandler target="{btn}" name="click" handler="handler()"/>        <mx:AddChild relativeTo="{v1}">             <mx:Button label="New Button" />        </mx:AddChild>   </mx:State>   <mx:State name="State2">          ...    </mx:State> </mx:states>

我們知道,使用MXML而不是ActionScript的一大好處在於,用MXML所表達的內容非常易讀和直觀(設計師也可以理解),而且MXML易於編寫。但是在Flex 3中使用檢視狀態時,這些優點都喪失了:描述狀態的MXML文法即不易讀,也難以編寫和維護。如果你想瞭解某一個特定狀態下的實際效果,你必須把這些看起來更像ActionScript的MXML代碼在腦海中“運行”一遍,而且要確保你的記性足夠好。:P

但是在Flex 4中,情況則大不相同了。

Flex 4:全新的檢視狀態文法

在Flex 4中,我們使用美觀的“點文法”來代替醜陋的SetProperty,SetEventHandler以及SetStyle,如下例:

<mx:Button label.state1="State 1" label.state2="State 2"                    color.state1="0xFF0000" color.state2="0xFFFF00"        click.state1="handler1(event)" click.state2="handler2(event)"/>

上面的代碼我想不需要任何解釋也能非常容易地理解,類似地,我們使用includeIn和excludeFrom來代替AddChild/RemoveChild:

  • includeIn聲明當前組件“只存在於特定狀態中”。
  • excludeFrom聲明當前組件“只在特定狀態中不存在”。

例如:

<s:states>    <s:State name="state1"/>    <s:State name="state2"/>    <s:State name="state3"/></s:states> <mx:Button id="button1" includeIn="state1" /> <mx:Button id="button2" excludeFrom="state3" /> <mx:Button id="button3" includeIn="state2,state3" />

在上面的例子中:

  • button1存在於state1,在state2和state3中不存在。
  • button2存在於state1和state2,在state3中不存在。
  • button3存在於state2和state3,在state1中不存在。

可以看到,新的視圖文法將所有與狀態有關的設定“嵌入”到組件的標籤中,並使用了簡化的文法,從而大大提高了可讀性並降低了編寫的難度。我想檢視狀態將成為我在Flex 4中經常使用的特性。:P(需要注意的是,想要使用新的檢視狀態文法,你必須使用MXML 2009版本。)

下面是一個Flex3中經典的使用檢視狀態的執行個體:使用者登陸/註冊對話方塊。使用者通過點擊按鈕來切換狀態並顯示不同內容。我將這個例子用Flex 4的檢視狀態文法改寫,你可以拷貝代碼並編譯運行來看到效果:

<?xml version="1.0" encoding="utf-8"?><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"><s:states><s:State name="login"/><s:State name="register"/></s:states> <s:Panel title="Login"  title.register="Register" height="138" height.register="170"        verticalCenter="0" horizontalCenter="0" width="290"><s:TextInput x="89" y="10" width="177"/><s:TextInput x="89" y="42" width="177"/><s:Label x="10" y="10" text="User Name:" width="66" height="21" verticalAlign="middle"/><s:Label x="10" y="44" text="Password:" width="66" height="21" verticalAlign="middle"/><s:Button x="10" label="Need to Register?" label.register="Back to login" bottom="8"         click="currentState='register'" click.register="currentState='login'"/><s:Button x="196" bottom="8" label="Login" label.register="Register"/><s:Label includeIn="register" x="10" y="82" text="Confirm:" /><s:TextInput includeIn="register" x="89" y="72" width="177"/></s:Panel></s:Application>

更酷的是,Flash Builder 4提供了代碼環境下可以動態切換檢視狀態的功能,所有在當前選擇的檢視狀態下無效的代碼將會以灰階顯示,使你可以更加直觀的檢查不同狀態下的生效代碼,例如選中上面例子中login狀態:

在下一章中,我們將介紹其他與狀態視圖有關的新特性,包括如何控制組件在不同檢視狀態下的建立和銷毀,狀態群組,以及<fx:Reparent>標籤等等。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.