zhangsenwei

          張森煒的博客

          聯(lián)系 管理
            19 Posts :: 8 Stories :: 55 Comments :: 0 Trackbacks

          3.1  MXML語(yǔ)法

          通常情況下,Flex程序由以下三種文件組成:

          以 mxml為后綴的程序文件

          以 as 為后綴的 ActionScript 文件

          css 為后綴的樣式表文件

          MXML文件就好比大腦,as文件和css文件是他的手和腳,主程序MXML文件將項(xiàng)目中的所有文件組合在一起,形成一個(gè)有機(jī)的整體。

          本章簡(jiǎn)要說明MXML的語(yǔ)法,并結(jié)合實(shí)力分析MXML文件的內(nèi)容結(jié)構(gòu)。

          在上一章的實(shí)例中,創(chuàng)建了一個(gè)簡(jiǎn)單的Flex程序,主程序文件是一個(gè)“mxml”為后綴名的文件,這個(gè)文件所采用的便是我們這里要講的MXML語(yǔ)言。

          MXML語(yǔ)言,是專門用于Flex程序中,描述界面表現(xiàn)的一種XML標(biāo)記語(yǔ)言。我們可以用它來管理程序的整體布局,控制組建的央視和外觀,也可以構(gòu)建非可視化的對(duì)象,比如XML數(shù)據(jù)、與服務(wù)器端通信的WebService、組件的數(shù)據(jù)源等等。

          3.1.1 命名規(guī)范

          類似網(wǎng)頁(yè)中實(shí)用的HTML語(yǔ)言,MXML提供了一系列的標(biāo)簽供用戶使用,到哪MXML的語(yǔ)法更嚴(yán)格的多,他提供的內(nèi)置標(biāo)簽也更豐富。

          MXML區(qū)分大小寫,且文件名和變量標(biāo)識(shí)名都區(qū)分大小寫。字母大小寫錯(cuò)誤是編程中常見的錯(cuò)誤,隱蔽性較高,有時(shí)很難排錯(cuò)。在編寫代碼時(shí),應(yīng)采用合理的命名規(guī)范,避免出現(xiàn)這類錯(cuò)誤。

          Flex程序中,每個(gè)MXML文件必須以小寫的“mxml”作為后綴,文件名要遵循ActionScript中變量的命名規(guī)則。因?yàn)樵诔绦蛑?,所有?/font>MXML文件名可以直接被ActionScript當(dāng)作一種用戶定的數(shù)據(jù)類型來使用。因此,MXML文件名不能和ActionScript類文件同名,否則就會(huì)造成類型沖突。在ActionScript中,變量名必須以字母或下劃線開始,且只能包含字母、數(shù)字和下劃線。

          需要注意的是,MXML文件不能名為“application” ,application”是住程序文件所采用的默認(rèn)標(biāo)記,不可以在被使用。也不能和程序中任意組件的id值同名。

          例如,下面是HelloWorld.mxml文件的源代碼:

          1 <?xml version="1.0" encoding="utf-8"?>
          2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
          3   <mx:Button id="btn" x="51" y="107" label="Click me" click="trace('這是點(diǎn)擊后的文字')"/>
          4   <mx:Label id="tip_txt" x="182" y="109" text="這是點(diǎn)擊前的文字" fontSize="12" width="136"/>
          5 </mx:Application>

          嘗試作如下修改:

          <mx:Label id="HelloWorld" x="182" y="109" text="這是點(diǎn)擊前的文字" fontSize="12" width="136"/>

           

          再次編譯,將無法通過編譯,得到如下錯(cuò)誤信息:identifier and class may not have the same name,意思是說組件的唯一標(biāo)識(shí)名“id”不可以和對(duì)象重名。

          還有一點(diǎn)說明:程序不可以使用“mx”作為目錄名。“mx”是Flex Framework的官方組件庫(kù)的命名空間,受到Flex編譯器的保護(hù)。假如在程序目錄中創(chuàng)建了名為“mx”的目錄,這個(gè)目錄中存放的MXML文件和ActionScript類文件都將無法使用,會(huì)被編譯器忽略。

          為了避免文件名沖突,同時(shí)也為了增強(qiáng)程序的可讀性,文件和變量一般采用有意義的單詞、名詞簡(jiǎn)寫或字符組合來命名。下面介紹一些習(xí)慣用法:

                 (1) 用類型的簡(jiǎn)寫作后綴,比如:LoginPanel表示登陸面板;SendBtn表示發(fā)送按鈕;UserTxt表示文本組件。

                 (2) 使用下劃線組合單詞,比如:User_Name、User_Email表示用戶的信息;Move_Speed表示速度。

                 (3) 常量全部使用大寫,比如:PI表示圓周率;CLICK_EVENT表示點(diǎn)擊事件名。

          不管時(shí)使用哪種方式,目的都是為了提高程序的代碼質(zhì)量,這對(duì)開發(fā)和日后的維護(hù)都很有幫助。

          3.1.2 MXML文件結(jié)構(gòu)

          一個(gè)MXML文件由哪些元素構(gòu)成?我們已經(jīng)知道MXML文件其實(shí)是一個(gè)標(biāo)準(zhǔn)的mxl文件,因此可以參考XML語(yǔ)法來分析MXML文件的內(nèi)容。

          這里仍然以上一章實(shí)例的代碼為例:

          1 <?xml version="1.0" encoding="utf-8"?>
          2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
          3   <mx:Button id="btn" x="51" y="107" label="Click me" click="trace('這是點(diǎn)擊后的文字')"/>
          4   <mx:Label id="tip_txt" x="182" y="109" text="這是點(diǎn)擊前的文字" fontSize="12" width="136"/>
          5 </mx:Application>

          MXL文件中,需要在第一行聲明XML文件采用的語(yǔ)法版本號(hào)和文件采用的編碼格式。從上面的代碼中可以看到這兩個(gè)屬性:versionencoding,其中encoding編碼格式這個(gè)屬性是可選的。選定的編碼格式必須符合文件采用的編碼格式,默認(rèn)為utf-8格式。在中文操作系統(tǒng)中,一般都使用utf-8這個(gè)編碼格式,他兼容采用雙字節(jié)編碼的語(yǔ)言(包括中文、韓文、日文等)和其他常見的西方語(yǔ)言,而且跨平臺(tái),是使用最廣發(fā)的編碼格式。另外也可以使用簡(jiǎn)體中文專用編碼gb2312.

          mx:Application標(biāo)簽是一個(gè)特殊的標(biāo)簽。在每個(gè)Flex項(xiàng)目中,可能有多個(gè)MXML文件,但作為程序入口的運(yùn)行文件只有一個(gè),主文件的標(biāo)示是根節(jié)點(diǎn)為mxApplication,一個(gè)程序中只能出現(xiàn)一個(gè)mxApplication節(jié)點(diǎn)。

          在根節(jié)點(diǎn)中,還看到了一個(gè)屬性:xmlns:mx=http://www.adobe.com/2006/mxml,表示將mx定義為MXL的命名空間。xmlns標(biāo)簽專門用來定義XML的命名空間,XML命名空間可以用來定義一套獨(dú)立的XML標(biāo)簽,并且為這些標(biāo)簽制定特殊的解析方式。比如XML中默認(rèn)的標(biāo)簽格式為:<Button>node</Button>,這里的Button節(jié)點(diǎn)被作為一個(gè)普通的文本節(jié)點(diǎn),沒有什么特殊的意義。定義命名空間后,在節(jié)點(diǎn)上就愛上空間前綴:<mx:Button></mx:Button>,這時(shí)候mx:Button 就代表mx空間下的Button對(duì)象。

          mx命名空間對(duì)應(yīng)的路徑是“http://www.adobe.com/2006/mxml,Flex的配置文件中將這個(gè)路徑定義為一個(gè)全局資源標(biāo)識(shí)符,并對(duì)應(yīng)了一個(gè)MXL文件。在這個(gè)文件中,列出了mx命令空間下的所有標(biāo)簽。在Flex Builder2的安裝路徑下,進(jìn)入Flex SDK2\frameworks目錄中,找到flex-config.xml 文件并使用記事本或其他編輯工具打開,找到下面的內(nèi)容:

          1 <namespaces>
          2    <!—Specify a URI to associate with a manifest of components for use as MXML-->
          3    <!—elements.
          4    <namespace>
          5       <uri>http://www.adobe.com/2006/mxml</uri>
          6       <manifest>mxml-manifest.xml</manifest>
          7    </namespace>
          8 </namespaces>

          從上面的配置中發(fā)現(xiàn),http://www.adobe.com/2006/mxml 這個(gè)URImxml-manifest.xml文件對(duì)應(yīng)。下面打開同目錄下的mxml-manifest.xml 文件,里面列出了MXML中的所有標(biāo)簽和與標(biāo)簽相關(guān)的類文件路徑。

           1 <?xml version="1.0"?>
           2 <componentPackage>
           3     <component id="Accordion" class="mx.containers.Accordion"/>
           4     <component id="AddChildAction" class="mx.effects.AddChildAction"/>
           5     <component id="AnimateProperty" class="mx.effects.AnimateProperty"/>
           6     <component id="Application" class="mx.core.Application"/>
           7     <component id="ApplicationControlBar" class="mx.containers.ApplicationControlBar"/>
           8     <component id="ArrayCollection" class="mx.collections.ArrayCollection"/>
           9     <component id="Blur" class="mx.effects.Blur"/>
          10     ..
          11     .
          12     <component id="SecureHTTPChannel" class="mx.messaging.channels.SecureHTTPChannel"/>    
          13     <component id="SecureRTMPChannel" class="mx.messaging.channels.SecureRTMPChannel"/>
          14 </componentPackage>

           

          在這份列表中,節(jié)點(diǎn)的id代表標(biāo)簽名,class表示類文件的路徑。比如mx:Application標(biāo)簽,也就是對(duì)應(yīng)了mx.core.Application類。

          在開發(fā)中,當(dāng)程序中有很多的MXML文件和AS文件時(shí),為了方便調(diào)用,我們可以將功能類似的文件放在一個(gè)文件夾中,定義一個(gè)命名空間,這樣會(huì)節(jié)省很多時(shí)間。在自定義命名空間時(shí),為了方便,一般直接指定命名空間包括的標(biāo)簽路徑。比如:

          xmlnsmyComp="components.*"

          因?yàn)槭褂昧送ㄅ浞?#8220;*”,components目錄下的所有MXML文件和ActionScript類文件(不包括目錄和目錄中的文件)都被包括在myComp命名空間下。假如components中有一個(gè)LoginPanelmxml文件,則在程序中調(diào)用者個(gè)文件時(shí),代碼如下:

          <myCompLoginPanel></myCompLoginPanel>

          myComp下的標(biāo)簽被自動(dòng)指向components中的文件。

          當(dāng)標(biāo)簽數(shù)量較多且分布在不同文件夾時(shí),可以模仿Flex配置文件的做法,使用XML文件來描述標(biāo)簽的路徑。在后面的內(nèi)容中,我們會(huì)經(jīng)常看到命名空間的使用。

          Application標(biāo)簽中還有一個(gè)屬性layout,這個(gè)屬性定義了Application節(jié)點(diǎn)下元素的布局方式。由于Application是根節(jié)點(diǎn),因此他的布局方式?jīng)Q定了程序的總體布局方式。“absolute”表示決定定位,所有子元素將按照各自的x、y坐標(biāo)來定位。

          Application節(jié)點(diǎn)中有兩個(gè)子節(jié)點(diǎn),分別是mx:Buttonmx:Label節(jié)點(diǎn),代表了兩個(gè)組件,節(jié)點(diǎn)中的屬性定義了組件初始化后的一些狀態(tài),比如坐標(biāo)、標(biāo)示名、文字等等。


          說明:由于在網(wǎng)上相關(guān)資源太少所以本文是按照《Flex第一步》編寫,由于時(shí)間比較短所以第三章內(nèi)容沒有全部出來同時(shí)編寫過程中有錯(cuò)別字,請(qǐng)大家擔(dān)待。^_^

          posted on 2009-08-28 17:35 張森煒 閱讀(2134) 評(píng)論(0)  編輯  收藏 所屬分類: Flex

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 乌恰县| 施秉县| 滨海县| 健康| 洛川县| 无锡市| 定西市| 六安市| 剑河县| 宁河县| 邢台县| 安溪县| 偏关县| 方正县| 阿拉善右旗| 红河县| 贵定县| 安化县| 田阳县| 中牟县| 菏泽市| 吴江市| 棋牌| 化州市| 宝应县| 华池县| 新建县| 札达县| 会昌县| 清远市| 柘荣县| 米易县| 浦东新区| 东安县| 灵寿县| 开鲁县| 萝北县| 颍上县| 东源县| 乐业县| 团风县|