您好,登錄后才能下訂單哦!
小編給大家分享一下Flex是如何工作的,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
Flex是如何工作的
該部分文檔的內(nèi)容是為用戶提供關(guān)于Adobe?Flex工作機(jī)制的一個(gè)快速綜述。通過本章節(jié)的學(xué)習(xí),你可以創(chuàng)建你的第一個(gè)Flex應(yīng)用程序,并將它與你以前所熟悉的Web開發(fā)技術(shù)進(jìn)行比較,以領(lǐng)會(huì)Flex的內(nèi)涵和精髓。
Flex學(xué)習(xí)第一節(jié):構(gòu)建并運(yùn)行Flex應(yīng)用程序
Flex是一個(gè)提供開發(fā)設(shè)計(jì)和運(yùn)行支持的架構(gòu),它可以使開發(fā)人員創(chuàng)建利用Adobe?
Flash?Player9作為前臺(tái)的“富客戶端互聯(lián)網(wǎng)應(yīng)用程序/richInternetapplications/RIA”,以滿足用戶更為直觀和極具交互性的在線體驗(yàn)。
◆開發(fā)Flex應(yīng)用程序的典型步驟如下(通常是這樣):
1.選取一系列預(yù)先定制好的、用于設(shè)計(jì)應(yīng)用程序界面的組件(如表格、按鈕等等)
2.布置組件以設(shè)計(jì)用戶界面。
3.使用樣式和主題來增強(qiáng)視覺方面的設(shè)計(jì)。
4.添加動(dòng)態(tài)行為(例如程序部件之間的相互作用)。
5.定義并連接所需的數(shù)據(jù)庫服務(wù)。
6.將源代碼編譯成SWF文件,然后在FlashPlayer中運(yùn)行。
◆Flex學(xué)習(xí)手冊中一個(gè)典型的Flex應(yīng)用程序包括如下元素:
1.Flexframework
Adobe?Flex2framework包含了創(chuàng)建RIA所需要的所有組件,它們是:用于應(yīng)用程序布局規(guī)劃的容器;針對用戶界面和從用戶處獲取數(shù)據(jù)的控制(例如文本框和按鈕);廣泛支持的數(shù)據(jù)綁定、數(shù)據(jù)格式化、以及有效值驗(yàn)證;事件驅(qū)動(dòng)的開發(fā)模式。Flexframework被包含在公用組件庫(SWC)文件中。
2.MXML
每個(gè)Flex應(yīng)用程序至少包含有一個(gè)MXML文件,它被作為該程序的主文件。MXML是一種標(biāo)記語言,它是基于XML的一種實(shí)現(xiàn),用來創(chuàng)建Flex應(yīng)用程序。你可以使用它去聲明程序中所使用的標(biāo)簽結(jié)構(gòu)的定義。
3.ActionScript3.0
你可以使用ActionScript3.0為應(yīng)用程序添加動(dòng)態(tài)行為,它是基于ECMAScript的一種實(shí)現(xiàn),類似于JavaScript。你可以將ActionScript作為一個(gè)腳本塊,在MXML文件中直接進(jìn)行添加;或者創(chuàng)建一個(gè)單獨(dú)的ActionScript文件,然后將它們導(dǎo)入到MXML文件中。
4.CSS
你可以通過設(shè)置組件的屬性(properties)來改變組件(按鈕、列表框等)的視覺樣式。
例如,按鈕組件有一個(gè)fontFamily屬性,你可以使用它來進(jìn)行字體的設(shè)置。樣式的屬性通常有四種方法來進(jìn)行控制:通過主題(theme);在CSS文件中進(jìn)行定義;在MXML文件中的樣式塊中進(jìn)行定義;在組件的實(shí)例中進(jìn)行設(shè)置。
5.圖形資源
與很多應(yīng)用程序一樣,F(xiàn)lex包含了各種各樣的圖形資源,如圖標(biāo)和圖象。
6.數(shù)據(jù)
一些組件被使用來進(jìn)行數(shù)據(jù)顯示(combobox或者datagrid)的工作。同時(shí),你還可以使用各種方式來將這些組件與數(shù)據(jù)聯(lián)系起來,如使用數(shù)組、收集對象、數(shù)據(jù)模型、以及外部XML數(shù)據(jù)資源,等等。
Flex應(yīng)用程序是如何編譯和發(fā)布的:
所有的元素都被編譯或連接到你的Flex應(yīng)用程序中。Flex應(yīng)用程序被編譯成一個(gè)SWF文件,然后在FlashPlayer下運(yùn)行。當(dāng)一個(gè)源代碼被編譯時(shí),它就被轉(zhuǎn)換成ActionScript類(譯者注:這正是Flex精髓的地方之一,即提供從MXML到ActionScript的轉(zhuǎn)換),并與圖形和其它資源合并到SWF文件里。在運(yùn)行時(shí),SWF文件與所需的外部庫、服務(wù)和數(shù)據(jù)源進(jìn)行交互。
一般的Flex應(yīng)用程序并不需要服務(wù)器端所提供的支持。因此,你可以在你的本地計(jì)算機(jī)上編譯它們,然后在Web服務(wù)的HTML頁面中發(fā)布給你的用戶。
當(dāng)然,你還可以將Flex與Adobe?FlexDataServices2、ColdFusionFlashRemotingService、或者其它Java和J2EEService服務(wù)器技術(shù)結(jié)合起來,進(jìn)行B/S結(jié)構(gòu)的網(wǎng)絡(luò)應(yīng)用程
序的開發(fā)。
MXML:一切開始的地方
你可以在MXML中使用Flex所提供的組件來定義用戶界面。這里有一個(gè)主MXML程序文件的例子:
<?xmlversionxmlversion="1.0"encoding="utf-8"?> <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute"> <mx:Panel> <mx:TextAreatextmx:TextAreatext="SayhellotoFlex!"/> <mx:Buttonlabelmx:Buttonlabel="Close"/> </mx:Panel> </mx:Application>
如果你對XML已經(jīng)很熟悉了,就能一眼識(shí)別出這個(gè)例子的格式。MXML代碼的頭兩行包含了版本號(hào)、編碼、以及命名空間的信息,文檔的主體包含的是程序的具體內(nèi)容。
Flex應(yīng)用程序所有的具體內(nèi)容都被放在<mx:Application>標(biāo)簽對中。同時(shí),你還可以在父標(biāo)簽對中嵌套其它的子標(biāo)簽對(譯者注:反正標(biāo)簽是成對出現(xiàn)的,這點(diǎn)一定要記?。?。
該例子創(chuàng)建了一個(gè)簡單的程序,它在屏幕上顯示“SayhellotoFlex!”的文字。在該程序中,聲明了TextArea和Button組件,并設(shè)置了它們相應(yīng)的text和label屬性。
備注:在MXML文件中的每個(gè)標(biāo)簽都有前綴mx,它是Flex的設(shè)計(jì)命名空間。
Flex學(xué)習(xí)第二節(jié):連接數(shù)據(jù)
請記住,在Flex應(yīng)用程序中對數(shù)據(jù)的操作最重要的事情是:Flex應(yīng)用程序并不直接與一個(gè)數(shù)據(jù)庫進(jìn)行連接。因此,Adobe?FlexBuilder2沒有提供直接連接數(shù)據(jù)的工具。你可以通過使用MXML和ActionScript代碼來操作和管理數(shù)據(jù)。
在Flex中,你可以使用幾種方法去操縱和管理數(shù)據(jù),它們大多數(shù)相關(guān)的內(nèi)容已經(jīng)超出了在這里進(jìn)行簡要介紹的范圍(更多的信息,請查看后面的章節(jié))。不管怎樣,請想象一種可以連接外部數(shù)據(jù)的方法,隨后的例子將演示與XML結(jié)構(gòu)的數(shù)據(jù)進(jìn)行連接。
數(shù)據(jù)的生成
因?yàn)镕lex應(yīng)用程序并不直接與一個(gè)數(shù)據(jù)庫進(jìn)行連接,所以你需要使用某種類型的服務(wù)來支持對數(shù)據(jù)的使用。在隨后的例子中,將使用HTTPService組件從PHP所產(chǎn)生的一個(gè)XML文件中獲取數(shù)據(jù)。
連接數(shù)據(jù)庫的第一步是生成將在Flex程序中使用到的數(shù)據(jù)。在與PHP的應(yīng)用中,你將采用如下的步驟:
1.創(chuàng)建一個(gè)數(shù)據(jù)庫(如MySQL)。
2.編寫一個(gè)PHP腳本連接MySQL數(shù)據(jù)庫并生成XML格式的數(shù)據(jù)。
這些步驟同樣適合于在其它工作平臺(tái)上生成的數(shù)據(jù)(如ASP.NET、JSP等)。
◆連接外部數(shù)據(jù)源
對于PHP所生成的XML格式數(shù)據(jù),你可以使用HTTPService組件來請求獲取數(shù)據(jù),就象這樣:
<mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute"> <mx:HTTPService id="productsRequest" url="http://www.somesite.com/products.php"/> ...
HTTPService組件定義了一個(gè)請求ID,你將使用這個(gè)ID來控制提供數(shù)據(jù)的URL或者服務(wù)器與數(shù)據(jù)之間的綁定。
◆外部數(shù)據(jù)與數(shù)據(jù)驅(qū)動(dòng)控制的綁定
通過數(shù)據(jù)與數(shù)據(jù)驅(qū)動(dòng)控制(data-drivencontrol)的綁定,你就可以處理HTTPService的結(jié)果(XML數(shù)據(jù)),就象這樣:
<mx:DataGridxmx:DataGridx="20"y="80"id="productGrid"width="400" dataProvider="{productRequest.lastResult.products.items}"> <mx:columns> <mx:DataGridColumnheaderTextmx:DataGridColumnheaderText="Name"dataField="name"/> <mx:DataGridColumnheaderTextmx:DataGridColumnheaderText="Price"dataField="price"/> </mx:columns> </mx:DataGrid>
數(shù)據(jù)綁定的語法顯示在數(shù)據(jù)控制的dataProvider屬性中(在波浪形的括號(hào)里),它包含了HTTPService請求ID、lastResult方法、以及XML文件的數(shù)據(jù)結(jié)構(gòu)。在這個(gè)例子中,XML數(shù)據(jù)源的數(shù)據(jù)結(jié)構(gòu)看起來就象這樣:
<XML> <products> <item> <name>MobilePhone</name> <price>$199</price> </item> <item> <name>CarCharger</name> <price>$34</price> </item> ...
通過設(shè)置dataField屬性,項(xiàng)目數(shù)據(jù)(name和price)作為數(shù)據(jù)柵格中每一列的數(shù)據(jù)。
◆在運(yùn)行時(shí)加載數(shù)據(jù)
你還可以在Flex程序開始運(yùn)行時(shí)加載數(shù)據(jù),就象隨后所示,在HTTPService中向某個(gè)特定的URL發(fā)送一個(gè)請求:
<mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"creationComplete="productsRequest.send()">
當(dāng)你將creationComplete方法添加到應(yīng)用程序標(biāo)簽里后,數(shù)據(jù)會(huì)在運(yùn)行時(shí)進(jìn)行加載并交于數(shù)據(jù)驅(qū)動(dòng)控制(在這個(gè)例子中是數(shù)據(jù)柵格)。
你還可以將HTTPService請求添加到一個(gè)控制事件上而不是程序里的標(biāo)簽中,就象如下所示:
<mx:Buttonxmx:Buttonx="50"y="8"label="GetData" click="productsRequest.send();"/>
Flex提供許多方法去連接、管理、格式化、以及校驗(yàn)數(shù)據(jù)。你可以通過使用遠(yuǎn)程程序調(diào)用、數(shù)據(jù)服務(wù)、或者其它企業(yè)級(jí)技術(shù)來操縱和管理數(shù)據(jù)。
Flex學(xué)習(xí)第三節(jié):關(guān)于FlashPlayer安全性方面的問題
出于安全方面的考慮,在客戶端的FlashPlayer中運(yùn)行的應(yīng)用程序,只有在滿足如下條件之一的情況時(shí)才能訪問遠(yuǎn)程的數(shù)據(jù)源:
1.應(yīng)用程序所編譯的SWF文件與遠(yuǎn)程數(shù)據(jù)源位于同一個(gè)域中。
2.使用代理(proxy),并且你的SWF文件位于和代理相同的服務(wù)器上。AdobeFlexDataServices為Flex應(yīng)用程序提供了一個(gè)完整的代理管理系統(tǒng)。同時(shí),你還可以通過使用一種web腳本語言,如ColdFusion、JSP、PHP或者ASP來創(chuàng)建一個(gè)簡單的代理服務(wù)。
3.安裝crossdomain.xml(跨域策略/cross-domainpolicy)文件在數(shù)據(jù)源的宿主Web服務(wù)器上。crossdomain.xml文件允許位于其它域中的SWF文件對數(shù)據(jù)源的訪問。
第四節(jié)為Flex應(yīng)用程序設(shè)計(jì)界面布局
讓我們來詳細(xì)分析一下前面那個(gè)“SayHellotoFlex“的簡單例子,你可以通過設(shè)置組件的屬性值來控制Flex應(yīng)用程序的界面布局,就象如下所示:
<?xmlversionxmlversion="1.0"encoding="utf-8"?> <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Panellayoutmx:Panellayout="absolute"width="80%"height="80%"> <mx:TextAreatextmx:TextAreatext="SayhellotoFlex!"top="10"bottom="70"left="10" right="30"/> <mx:Buttonlabelmx:Buttonlabel="Close"right="30"bottom="40"/> </mx:Panel> </mx:Application>
許多容器組件都允許以絕對坐標(biāo)的方式創(chuàng)建布局,這就意義著你可以使用精確的x和y的坐標(biāo)來放置組件。你還可以對應(yīng)其父容器的相對位置來放置組件并約束它們,使它們在應(yīng)用程序的界面放大或縮小時(shí)仍然保持其彼此的位置。
在這個(gè)例子中,面板/Panel組件的布局屬性被設(shè)置為絕對值方式,同時(shí)所有容器的大小都被設(shè)置為應(yīng)用程序的百分之八十。兩個(gè)組件(TextArea和Button)被放置到距離面板容器邊界的特定象素位置上。
◆使用風(fēng)格和主題增強(qiáng)視覺方面的設(shè)計(jì)
如果樣式/style的屬性值沒有被指定,它們將由整個(gè)程序中運(yùn)行的主題/theme來進(jìn)行控制。在默認(rèn)情況下,F(xiàn)lex應(yīng)用程序使用Halo主題(就象上面那個(gè)例子那樣)。當(dāng)然,你可以修改默認(rèn)的主題或者干脆自己創(chuàng)建一個(gè)。你還可以簡單地指定新的樣式定義來改變默認(rèn)的主題樣式,就象這樣:
<?xmlversionxmlversion="1.0"encoding="utf-8"?> <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Style> TextArea{ font-size:36px; font-weight:bold; } </mx:Style> <mx:Panellayoutmx:Panellayout="absolute"width="80%"height="80%" x="122"y="24"> <mx:TextAreatextmx:TextAreatext="SayhellotoFlex!"top="10"bottom="70"left="10"right="30"/> <mx:Buttonlabelmx:Buttonlabel="Close"right="30"bottom="40"/> </mx:Panel> </mx:Application>
通過明確地為TextArea組件定義一個(gè)樣式,應(yīng)用程序現(xiàn)在看起來就會(huì)象這樣了:
在這個(gè)例子中,一種新樣式在MXML文件中的<mx:Style>標(biāo)簽里進(jìn)行了定義。如同我們前面所提到過的,你還可以通過修改主題或應(yīng)用新主題、使用一個(gè)外部CSS文件、或者設(shè)置單獨(dú)的樣式屬性來達(dá)到設(shè)置新樣式的目的。
將一個(gè)樣式單導(dǎo)入到MXML文件中,你需要添加如下的代碼:
<mx:Stylesourcemx:Stylesource="styles.css"/>
Flex學(xué)習(xí)第五節(jié):事件和行為的使用
HTML應(yīng)用程序的原理是由客戶端發(fā)出請求,并從服務(wù)器端得到反應(yīng)。與之不相同的是,F(xiàn)lex應(yīng)用程序是基于事件的/event-based。舉個(gè)例子,當(dāng)用戶單擊一個(gè)按鈕時(shí),便會(huì)觸發(fā)一個(gè)事件。應(yīng)用程序本身,不是指服務(wù)器,包含了識(shí)別事件的邏輯并采取相應(yīng)的行動(dòng)。
◆當(dāng)事件被觸發(fā)時(shí)修改組件的屬性
對某個(gè)組件以編程方式進(jìn)行操作時(shí),為了對某個(gè)事件作出反應(yīng),必須首先要引用它,這時(shí)你就需要賦予它一個(gè)ID值,如下所示:
<mx:Panelid="myPanel"layout="absolute"width="80%"height="80%"x="122"y="24">
隨后你就可以將行為/behavior添加到應(yīng)用程序上,當(dāng)某個(gè)事件被觸發(fā)時(shí)改變組件的屬性值,就象這樣:
<mx:Buttonlabel="Close"right="30"bottom="40"click="myPanel.visible=false"/>當(dāng)按鈕被單擊時(shí),面板的可見屬性值被設(shè)置為false。
◆使用ActionScript功能函數(shù)
你也可以通過編寫ActionScript功能函數(shù),并在事件中調(diào)用它來達(dá)到相同的目的,在這種情況下,按鈕組件的單擊事件如下所示:
<?xmlversionxmlversion="1.0"encoding="utf-8"?> <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Stylesourcemx:Stylesource="styles.css"/> <mx:Script> <![CDATA[ publicfunctionclose():void{ myPanel.visible=false; } ]]> </mx:Script> <mx:Panelidmx:Panelid="myPanel"layout="absolute"width="80%" height="80%"x="122"y="24"> <mx:TextAreatextmx:TextAreatext="SayhellotoFlex!"top="10"bottom="70" left="10"right="30"/> <mx:Buttonlabelmx:Buttonlabel="Close"right="30"bottom="40"click="close();"/> </mx:Panel> </mx:Application>
ActionScript功能函數(shù)是在MXML文件里的<mx:Script>塊中進(jìn)行定義的,然后引用到按鈕的單擊事件上。
◆單獨(dú)的ActionScript代碼
為了從MXML文件中更好地分離出ActionScript代碼,你可以將它們放到單獨(dú)的ActionScript文件中而不是作為函數(shù),然后再將它們導(dǎo)入到MXML文件里,如下所示:
<mx:Scriptsourcemx:Scriptsource="myFunctions.as"/>
◆運(yùn)用行為和變換增強(qiáng)豐富的視覺互動(dòng)性
Flex應(yīng)用程序是事件驅(qū)動(dòng)的,這就意味著你可以在程序運(yùn)行時(shí)使用事件去添加豐富的視覺互動(dòng)性。為了實(shí)現(xiàn)它,你使用了一個(gè)事件觸發(fā)器,用其來描述一個(gè)行為。
在前面的例子中,面板組件的visible屬性值被設(shè)置為false因而不可見。你還可以通過使用行為來制造出更強(qiáng)的視覺效果。
下面的例子創(chuàng)建了一個(gè)行為,該行為首先創(chuàng)建好一種效果,然后把它綁定到組件的hideEffect屬性上(觸發(fā)器):
<mx:Fadeidmx:Fadeid="myFade"/> <mx:Panelidmx:Panelid="myPanel"layout="absolute" width="80%"height="80%" hideEffect="{myFade}">
當(dāng)關(guān)閉按鈕被單擊時(shí),面板組件淡出而不是消失。
觸發(fā)器和效果還可以組合到更為復(fù)雜的行為中,其被稱之為變換/transitions。
Flex學(xué)習(xí)第六節(jié):在應(yīng)用程序中添加多態(tài)頁面
有幾種方法在一個(gè)Flex應(yīng)用程序中創(chuàng)建多態(tài)頁面。你可以使用ViewStack組件、創(chuàng)建單獨(dú)的MXML文件、或者使用視圖狀態(tài)。視圖狀態(tài)可以被看作是一個(gè)組件或組件群構(gòu)成的預(yù)定義的用戶界面布局。你可以使用視圖狀態(tài)為程序表現(xiàn)出不同的視覺效果。每一種視圖狀態(tài)都是基于一種基礎(chǔ)的狀態(tài),并進(jìn)行繼承和擴(kuò)展。
在隨后的例子中,當(dāng)用戶在組件上滾動(dòng)鼠標(biāo)時(shí),基礎(chǔ)狀態(tài)發(fā)生變化。
當(dāng)一個(gè)視圖狀態(tài)被調(diào)用時(shí)(通過用戶的鼠標(biāo)在組件上滾動(dòng)時(shí)產(chǎn)生的事件),一種效果(或一種變換)改變了用戶界面的外觀。
使用視圖狀態(tài)方式、ViewStack方式還是MXML文件方式,取決于你想從一個(gè)頁面到另一個(gè)頁面進(jìn)行變化的范圍、用戶界面的復(fù)雜性、以及實(shí)現(xiàn)Flex程序的構(gòu)架。
Flex學(xué)習(xí)第七節(jié):開始使用Flex
現(xiàn)在,想必你對Flex的概念有了一個(gè)基礎(chǔ)的認(rèn)識(shí),讓我們開始創(chuàng)建Flex應(yīng)用程序吧。
◆使用FlexBuilder
通過使用新項(xiàng)目向?qū)?NewFlexProjectWizard創(chuàng)建一個(gè)Flex項(xiàng)目(File>New>FlexProject)。設(shè)計(jì),編譯,以及調(diào)試Flex應(yīng)用程序所需的所有工具,都被包括在FlexBuilder中了。
◆使用FlexSDK
創(chuàng)建一個(gè)文件名后綴為MXML的文本文件,在其中添加MXML文件的基本元素(上述例子中的頭兩行代碼),然后使用文檔資料(特別是AdobeFlex2LanguageReference)去研究各種組件的用法。編譯和調(diào)試工具是以命令行的方法提供的。
以上是“Flex是如何工作的”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。