Flex渲染機(jī)制中外部Flex渲染器用法指導(dǎo)
你對(duì)Flex渲染機(jī)制是否熟悉,這里和大家分享一下Flex渲染機(jī)制中外部Flex渲染器的概念,相信本文介紹一定會(huì)讓你有所收獲。
Flex渲染機(jī)制之外部Flex渲染器
這種Flex渲染器的MXML標(biāo)記和ActionScript代碼與使用該渲染器的列表位于同一文件中。代碼與文件中的其余代碼內(nèi)聯(lián)。您應(yīng)該還記得我說(shuō)過,應(yīng)該將內(nèi)聯(lián)渲染器視作單獨(dú)的類。事實(shí)上,Flex編譯器提取這些內(nèi)聯(lián)代碼并為您創(chuàng)建類。內(nèi)聯(lián)渲染器的優(yōu)勢(shì)在于代碼與列表位于同一位置,但是如果渲染器變得復(fù)雜時(shí),這又變成了劣勢(shì)。本文中我將向您展示如何自己創(chuàng)建類。
將Flex渲染器提取到一個(gè)外部文件有幾個(gè)優(yōu)勢(shì):
◆渲染器可輕松用于多個(gè)列表中
◆代碼更容易維護(hù)
◆可以使用FlexBuilder的“設(shè)計(jì)”視圖草擬出最初的渲染器
MXML渲染器
在第1部分中,您看到有一個(gè)復(fù)雜的渲染器用于DataGrid:
- <mx:DataGridColumnheaderTextmx:DataGridColumnheaderText="Title"dataField="title">
- <mx:itemRenderer>
- <mx:Component>
- <mx:HBoxpaddingLeftmx:HBoxpaddingLeft="2">
- <mx:Script>
- <![CDATA[
- overridepublicfunctionsetdata(value:Object):void{
- super.data=value;
- vartoday:Number=(newDate()).time;
- varpubDate:Number=Date.parse(data.date);
- if(pubDate>today)setStyle("backgroundColor",0xff99ff);
- elsesetStyle("backgroundColor",0xffffff);
- }
- ]]>
- </mx:Script>
- <mx:Imagesourcemx:Imagesource="{data.image}"width="50"height="50"
- scaleContent="true"/>
- <mx:Textwidthmx:Textwidth="100%"text="{data.title}"/>
- </mx:HBox>
- </mx:Component>
- </mx:itemRenderer>
- </mx:DataGridColumn>
◆Flex渲染器基于HBox,包含一個(gè)Image和一個(gè)Text,并且根據(jù)項(xiàng)目記錄的pubDate字段設(shè)置背景色??梢允褂靡韵虏襟E將同一Flex渲染器編寫為一個(gè)外部文件:
如果您使用FlexBuilder,請(qǐng)新建一個(gè)MXMLComponent文件(我將我的文件命名為GridColumnSimpleRenderer,您可以隨意命名),將根標(biāo)記設(shè)置為HBox。不必?fù)?dān)心大小。
如果您只使用SDK,請(qǐng)新建一個(gè)MXML文件(將它命名為GridColumnSimpleRenderer.mxml),將根標(biāo)記設(shè)置為HBox。
在文件打開時(shí),復(fù)制<mx:HBox>與</mx:HBox>之間的所有內(nèi)容,但不要復(fù)制那些標(biāo)記,因?yàn)槲募幸延兴鼈儭=Y(jié)果應(yīng)該如下:
- <?xmlversionxmlversion="1.0"encoding="utf-8"?>
- <mx:HBoxxmlns:mxmx:HBoxxmlns:mx="http://www.adobe.com/2006/mxml"
- width="400"height="300">
- <mx:Script>
- <![CDATA[
- overridepublicfunctionsetdata(value:Object):void{
- super.data=value;
- vartoday:Number=(newDate()).time;
- varpubDate:Number=Date.parse(data.date);
- if(pubDate>today)setStyle("backgroundColor",0xff99ff);
- elsesetStyle("backgroundColor",0xffffff);
- }
- ]]></mx:Script>
- <mx:Imagesourcemx:Imagesource="{data.image}"width="50"height="50"
- scaleContent="true"/>
- <mx:Textwidthmx:Textwidth="100%"text="{data.title}"/>
- </mx:HBox>
保存此文件。
現(xiàn)在修改DataGridColumn定義,方法是刪除內(nèi)聯(lián)渲染器并將它替換為以下內(nèi)容:
- <mx:DataGridColumnheaderTextmx:DataGridColumnheaderText="Title"dataField="title"
- itemRenderer="GridColumnSimpleRenderer">
現(xiàn)在運(yùn)行這個(gè)應(yīng)用程序。您會(huì)大吃一驚。因?yàn)樾泻芨?。這是因?yàn)殇秩酒魃系膆eight="300"。
◆決定Flex渲染器的寬度和高度
List控制始終設(shè)置渲染器的寬度。本例中將忽略明確的width="400"。您應(yīng)當(dāng)編寫自己的渲染器,假設(shè)用戶更改列或列表寬度是寬度會(huì)更改。
高度則是另一回事。如果列表設(shè)置了明確的rowHeight,它會(huì)將這個(gè)高度強(qiáng)加到各行,忽略您對(duì)渲染器設(shè)置的任何高度。但是,如果您將列表的variableRowHeight屬性設(shè)置為true,則列表會(huì)慎重考慮渲染器的高度。在本例中,高度明確設(shè)置為300,所以各行為300像素高。
要修復(fù)它,請(qǐng)從渲染器文件中刪除明確高度,應(yīng)用程序即可正確運(yùn)行。
【編輯推薦】