上一篇文章《Adobe Flex/AIR學(xué)習(xí)路線(Flex部分之?dāng)?shù)據(jù)篇一)》分析了Flex里面經(jīng)常使用的一些數(shù)據(jù)類(lèi)型、處理數(shù)據(jù)的一些常用的class等內(nèi)容,今天我們簡(jiǎn)述一下,Flex里面的哪些組件也具有數(shù)據(jù)處理能力。 1、dataProvider 在Adobe ActionScript 3.0里面的定義如下: 要查看的數(shù)據(jù)集。此屬性允許您將大多數(shù)類(lèi)型的對(duì)象用作數(shù)據(jù)提供程序。如果將 dataProvider屬性設(shè)置為 Array,則會(huì)將其轉(zhuǎn)換為 ArrayCollection。如果將該屬性設(shè)置為 XML對(duì)象,則會(huì)將其轉(zhuǎn)換為僅包含一個(gè)項(xiàng)目的 XMLListCollection。如果將該屬性設(shè)置為XMLList,則會(huì)將其轉(zhuǎn)換為 XMLListCollection。如果將該屬性設(shè)置為實(shí)現(xiàn) IList 或 ICollectionView接口的對(duì)象,則可直接應(yīng)用此對(duì)象。受轉(zhuǎn)換操作的影響,在您獲取 dataProvider屬性時(shí),該屬性值將始終為 ICollectionView,所以此值不一定是您設(shè)置的對(duì)象類(lèi)型。如果要修改數(shù)據(jù)提供程序中的數(shù)據(jù),則了解以下行為非常重要:可能不會(huì)檢測(cè)對(duì)原始數(shù)據(jù)所做的更改,但將檢測(cè)對(duì)從 dataProvider屬性獲取的 ICollectionView 對(duì)象所做的更改。默認(rèn)值為 null.此屬性可用作數(shù)據(jù)綁定的源。 上面那一大堆的東西其實(shí)就說(shuō)明以下幾點(diǎn): a、凡是具有dataProvider的組件,都可以將Array、XML等內(nèi)容作為數(shù)據(jù)源。 b、將這些作為數(shù)據(jù)源的內(nèi)容“自動(dòng)”綁定并顯示在這些控件上面。 所以通常的做法,當(dāng)Flex獲取了外部數(shù)據(jù)后,可以將其直接賦值為dataProvider,然后通過(guò)一些設(shè)定,就可以在這些組件上面顯示數(shù)據(jù)了。 關(guān)于這個(gè)例子我就不在這里復(fù)述了,大家可以自行去找一下,或者直接看這里的內(nèi)容:http://livedocs.adobe.com/flex/3_cn/mx/controls/ComboBox.html#includeExamplesSummary 2、itemRenderer(項(xiàng)目渲染器)及其data屬性。 itemRenderer的作用就是可以自定義一些組件的項(xiàng)目顯示效果,例如我們熟知的Combobox、List、DataGrid等都具有這樣的屬性,也就是說(shuō),我們可以利用itemRenderer來(lái)改善ComBoBox里面的下拉的顯示效果。當(dāng)然,List、DataGrid也是這樣的。 當(dāng)ComboBox中自定義了一個(gè)渲染器后,同時(shí)使用dataProvider的方式綁定了一個(gè)數(shù)據(jù)源,這個(gè)時(shí)候,如何與我們自定義的渲染器里面的item發(fā)生作用呢?就是使用data方式。 也就是說(shuō),dataProvider可以綁定數(shù)據(jù)到UI、如果這個(gè)組件使用了自定義渲染器,那么就可以使用data.XXX的方式獲取到dataProvider里面的數(shù)據(jù)。 okay,以上介紹的兩個(gè)知識(shí)點(diǎn)是關(guān)于Flex組件的數(shù)據(jù)處理能力,其中dataProvider可以把Array、XML等內(nèi)容作為數(shù)據(jù)源直接綁定并顯示到UI上面,而itemRenderer里面的data是實(shí)現(xiàn)組件與其渲染器之間的數(shù)據(jù)處理。 下一篇的內(nèi)容是關(guān)于Flex與后臺(tái)進(jìn)行通訊的常見(jiàn)的幾種方式:HTTPService、WebService、Remote等方式,而通過(guò)這幾種方式可以輕松的讓一些例如Java、C#、Python、Ruby、PHP等主流編程語(yǔ)言為Flex所服務(wù):) 附加: 關(guān)于dataProvider、itemRenderer、data的具體用法有些抽象,因此我特此列舉一個(gè)例子來(lái)說(shuō)明一下。 這是一個(gè)HorizontalList組件,而且其中它的itemRenderer=ToolBoxRenderer,想讓我們看一下HorizontalList的片段代碼: <mx:HorizontalList id="myHorizontalList" itemRenderer="ToolBoxRenderer"> <mx:dataProvider> <mx:Array> <mx:Object tooltip= "rubber" styleName="rubber" language="{ _language }"/> </mx:Array> </mx:dataProvider> </mx:HorizontalList> 然后是ToolBoxRenderer的片段代碼: <mx:Canvas width="30" height="30"> <mx:Button width="30" height="30" toolTip="{ data.tooltip }" styleName="{ data.styleName }"/> </mx:Canvas> 再讓我們看看itemRenderer是如何與我們今天這個(gè)主題聯(lián)系起來(lái)的。 1、在myHorizontalList中定義了一個(gè)dataProvider,通過(guò)代碼可以看出是一個(gè)Array類(lèi)型的變量,然后將其賦值給dataProvider。這個(gè)時(shí)候,其實(shí)就應(yīng)該將數(shù)據(jù)顯示到myHorizontalList上面了,這也就是dataProvider的用處。 2、在dataProvider包含的Array中,定義如下的結(jié)構(gòu):<mx:Object tooltip= "rubber" styleName="rubber" language="{ _language }"/> 3、我們不僅設(shè)定了dataProvider,還是同時(shí)設(shè)定了itemRenderer,即為T(mén)oolBoxRenderer。 4、在ToolBoxRenderer里面,定義了一個(gè)Button,同時(shí)我們使用類(lèi)似于這樣的方式可以取得 以上就是一個(gè)非常簡(jiǎn)單,但是又非常典型的一個(gè)dataProvider、itemRenderer、data的用法,希望大家可以理解:)
做Flex的項(xiàng)目也很長(zhǎng)時(shí)間了,就來(lái)說(shuō)一下我經(jīng)常使用的一些Flex Tools 和 Resource。 Flex Framework: 1、Cairngorm 首先Cairngorm是Adobe推崇的一種Flex Framework,同時(shí)也是開(kāi)源的Framework,暫且不提它的單例模式、結(jié)構(gòu)等備受爭(zhēng)議的地方,就單單是前面所說(shuō),我想沒(méi)用不使用它的理由。 下載地址:http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm 2、Mate 我個(gè)人是非常喜歡的一個(gè)輕量級(jí)的Flex Framework,不過(guò)缺點(diǎn)就是只能在Flex里面使用。 關(guān)于Mate的詳細(xì)內(nèi)容可以去這里:http://www.k-zone.cn/zblog/post/flex-mate-framework.html Unit: 1、FlexUnit: FlexUnit是一個(gè)關(guān)于Flex與ActionScript 3.0的單元測(cè)試框架。在功能上有些與JUnit有些類(lèi)似,我比較推薦的一種測(cè)試框架。 地址:http://opensource.adobe.com/wiki/display/flexunit/FlexUnit IDE: 1、MyEclipse 在這里使用MyEclipse而不是Eclipse的原因,非常簡(jiǎn)單,因此MyEclipse很多東西都已經(jīng)集成好了,到時(shí)候你安裝一下Flex Builder for Eclipse plug-in就可以了。 地址:http://www.myeclipseide.com 2、Aptana(AIR) 如果想使用AIR IDE的話,我經(jīng)常使用的是Aptana、因此它除了可以編譯AIR外,還支持很多的JS library,例如Ext JS、JQuery等。正難能可貴的是,它還是可以編譯IPhone... 地址:http://aptana.com 3、FlashDevelop(ActionScript 3.0) 有的時(shí)候,需要一些ActionScript Project,那么如果再使用Myeclipse的話,似乎有些大材小用,因此我會(huì)使用FlashDevelop。 地址:http://www.flashdevelop.org Library: 1、Degrafa 由于我需要使用繪圖的一些東西,因此Degrafa是我不二的選擇。 地址:http://www.degrafa.org/ 2、as3corelib 這里面提供了很多很有用的功能,例如:包括幾個(gè)基礎(chǔ)的MD5、JSON、高級(jí)String以及數(shù)據(jù)解析等等,強(qiáng)烈推薦。 地址:http://code.google.com/p/as3corelib/ 3、FlexLib 這里面有很多開(kāi)源的第三方組件,有的時(shí)候的確是需要參考一下,強(qiáng)烈推薦。 地址:http://code.google.com/p/flexlib/ Explorers: 1、ComponentExplorer 這是關(guān)于Flex 3.0的一些常用組件,偶爾我也會(huì)看一下的。 地址:http://examples.adobe.com/flex3/componentexplorer/explorer.html 2、Flex 3 Style Explorer 地址:http://examples.adobe.com/flex3/consulting/styleexplorer/Flex3StyleExplorer.html Doc: 1、Flex編碼規(guī)約 地址:http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions 2、Flex SDK 3.0 Language Reference 地址:http://livedocs.adobe.com/flex/3/langref/ 3、Flex 4.0(Gumbo)Language Reference 地址: http://livedocs.adobe.com/flex/gumbo/langref/ 4、ActionScript language references 地址:http://www.adobe.com/devnet/actionscript/references/ 5、ASDoc ActionScript的API文檔生成工具ASDoc 地址:http://livedocs.adobe.com/flex/3/html/help.html?content=asdoc_1.html