摘自 http://blog.csdn.net/zzr173/archive/2008/07/05/2613156.aspx
一,概述
Flex語言包含了一個(gè)豐富的用戶界面組件庫(kù),MXML(一種基于XML的標(biāo)記語言)和ActionScript(基于ECMA 262的、強(qiáng)類型面向?qū)ο缶幊陶Z言)。MXML用于排布用戶界面和處理應(yīng)用中其他方面的問題,而ActionScript用來處理用戶交互邏輯。由于 Flash平臺(tái)的普及, Flex使開發(fā)者可以開發(fā)廣泛的應(yīng)用程序。開發(fā)者可以使用工業(yè)標(biāo)準(zhǔn)(如XML,CSS和SVC)和他們所熟悉的模式和范例來創(chuàng)建應(yīng)用。Flex的分離協(xié)作 方式和Flex公用組件模型也使得開發(fā)者和界面設(shè)計(jì)者能更好的進(jìn)行協(xié)作,在可靠的、易于維護(hù)的架構(gòu)上生產(chǎn)出在用戶體驗(yàn)方面有突破性的產(chǎn)品。
Flex Builder(FB)之于MXML就如DREAWEAVER之于HTML。FB實(shí)現(xiàn)了代碼與界面分開,F(xiàn)LEX的類程序擴(kuò)展名為*.as,語法與 java/c++很象,F(xiàn)LEX程序文件擴(kuò)展名為.mxml,其實(shí)就是擁有很多特殊元素的XML文件。
二,使用MXML組件構(gòu)建用戶界面
MXML 語言支持兩種用戶界面組件類型: 控件和容器。容器是包含控件和其他容器的屏幕的矩形區(qū)域。控件是表單元素, 如按鈕、文本字段和列表框。 可以使用 Flex Component Explorer Flex MXML組件瀏覽工具來查看所有控件的代碼和樣例。
1,加入常用可視控件: 使用可視控件組織界面,可以定義組件屬性供外部訪問 A, 基于文本的控件(Text controls): Label(單行文本顯示)、Text(多行文本顯示)、TextInput(單行文本顯示與輸入)、 TextArea(多行行文本顯示與輸入)和 RichTextEditor (富文本顯示與輸入)控件。用于顯示文本和/或接收來自用戶的文本輸入,都有一個(gè) text 屬性用于設(shè)置要顯示的文本。使用 RichTextEditor 控件可以輸入文本、編輯文本和設(shè)置文本格式。用戶通過使用位于 RichTextEditor 控件底部的子控件, 應(yīng)用文本格式和 URL 鏈接。
B, 基于按鈕的控件組件(Button 系列,Form controls):Button(激活時(shí)會(huì)發(fā)出click和buttonDown事件)、LinkButton(用于打開URL)、CheckBox (標(biāo)簽會(huì)被自動(dòng)裁剪以適合控件邊界。)、RadioButton(指由 <mx:RadioButtonGroup> 標(biāo)簽創(chuàng)建的組) 和 PopupButton 控件(常用于打開List控件或Menu控件簽。)。
2,加入基于列表的控件,并獲取數(shù)據(jù) 基于列表的控件: 是在其繼承層次結(jié)構(gòu)內(nèi)的某些點(diǎn)上擴(kuò)展 ListBase 類的那些控件。它們包括 ComboBox、List、HorizontalList、DataGrid、Tile、Menu 和 Tree 控件。都可從某數(shù)據(jù)提供程序的數(shù)據(jù)獲得數(shù)據(jù)列表。
另: 許多標(biāo)準(zhǔn)控件 (包括 ColorPicker 和 MenuBar 控件) 也是數(shù)據(jù)提供程序控件。 可以使用兩種方法設(shè)置組件的數(shù)據(jù)提供程序:
1),直接在MXML標(biāo)簽中加入數(shù)據(jù),將 Array 或 Collection 定義為取得數(shù)據(jù)提供程序的控件的子標(biāo)簽。該方法具有實(shí)施快速的優(yōu)點(diǎn), 適合與靜態(tài)數(shù)據(jù)一起使用及用于原型設(shè)計(jì)。
<mx:ComboBox id="userRating" width="100%">
<!-- An inline data provider -->
<mx:Array>
<mx:Object data="0" label="Zero" />
<mx:Object data="1" label="One" />
</mx:Array>
</mx:ComboBox>
2),使用數(shù)據(jù)綁定: 使用[Bindable]元數(shù)據(jù)標(biāo)簽(屬性非默認(rèn)綁定,必須明確的聲明被綁定的屬性),將控件綁定到使用 ActionScript 定義的現(xiàn)有 Array 或 Collection。
<mx:Script>
<![CDATA[
[Bindable]
private var subscriptions:ArrayCollection =
new ArrayCollection
(
[
{data:0, label:"Print"},
{data:1, label:"Website"},
]
);
]]>
</mx:Script>
<mx:FormItem label="Subscriptions:" width="100%">
<mx:List
id="userSubscriptions" rowCount="3"
allowMultipleSelection="true" width="100%"
dataProvider="{subscriptions}"
/>
3, 使用REPEATER: 是非可視控件,類似于編程語言里的For循環(huán),可在執(zhí)行期復(fù)制其它組件。<mx:Repeater>的卷標(biāo)要自己輸入,而 dataProvider可在<mx:Script>區(qū)段之中,以[Bindable]的Metadata定義之?dāng)?shù)組作連結(jié)。 REPEATER還可嵌套使用。
<mx:Script>
<![CDATA[
[Bindable]
public var dp:Array=[1,2,3,4];
]]>
</mx:Script>
<mx:ArrayCollection id="myAC" source="{dp}"/>
<mx:Repeater id="r" dataProvider="{myAC}">
<mx:Button id="repbutton" label="button {r.currentItem}"/>
</mx:Repeater>
4, 加入數(shù)據(jù)驗(yàn)證:數(shù)據(jù)模型支持自動(dòng)數(shù)據(jù)驗(yàn)證,這就意味著你可以很方便地使用Flex驗(yàn)證器。as3.0驗(yàn)證的類包為mx.Validators.包中有一個(gè)基類Validator,其他的類都為其子類:
1),用標(biāo)簽實(shí)現(xiàn)驗(yàn)證: //綁定驗(yàn)證對(duì)象:source:表示驗(yàn)證的對(duì)象,property:表示驗(yàn)證對(duì)象的屬性 <mx:PhoneNumberValidator id="pnV" source="{phoneInput}" property="text"/> <mx:TextInput id="phoneInput"/>
2),用AS編程實(shí)現(xiàn)驗(yàn)證
<mx:Script>
<![CDATA[
import mx.validators.PhoneNumberValidator;
// 創(chuàng)建驗(yàn)證器
private var v:PhoneNumberValidator = new PhoneNumberValidator();
private function createValidator():void {
// 設(shè)置驗(yàn)證器
v.source = phoneInput;
v.property = "text";
}
]]>
</mx:Script>
<mx:TextInput id="phoneInput" creationComplete="createValidator();"/>
還可以加入按鈕觸發(fā)器,并修改默認(rèn)提示錯(cuò)誤
//trigger:表示觸發(fā)驗(yàn)證事件的對(duì)象
//triggerEvent:表示對(duì)象觸發(fā)驗(yàn)證事件的時(shí)機(jī)(如click,mouseOver等)
//requiredFieldError屬性 表示必填項(xiàng)沒填入數(shù)據(jù)的時(shí)的提示錯(cuò)誤信息
//wrongLengthError:表示輸入的數(shù)據(jù)阿拉伯?dāng)?shù)字長(zhǎng)度小于10時(shí)提示的錯(cuò)誤信息
//invalidCharError:表示輸入數(shù)據(jù)不是阿拉伯?dāng)?shù)字時(shí)提示的錯(cuò)誤信息
<mx:PhoneNumberValidator id="pnV" source="{phoneInput}" property="text"
trigger="{btn}" triggerEvent="click"
requiredFieldError="此項(xiàng)為必填" invalidCharError="請(qǐng)輸入阿拉伯?dāng)?shù)字" wrongLengthError="請(qǐng)至少輸入請(qǐng)輸入10個(gè)阿拉伯?dāng)?shù)字" />
<mx:TextInput id="phoneInput"/>
<mx:Button label="Button" id="btn"/>
3),高級(jí)用法: 使用正則表達(dá)式創(chuàng)建自定義驗(yàn)證器
5, 加入資源(圖片,音頻,視頻,程序):運(yùn)行時(shí)外載和編譯時(shí)直接內(nèi)嵌兩種方式,外載方式要多花一段載入時(shí)間,但使用簡(jiǎn)單;內(nèi)嵌方式可直接調(diào)用資源,但加重了程序的負(fù)擔(dān)(體積變大,且圖片編輯后需要重新編譯)
1),Image(圖畫)控件: 可外載或內(nèi)嵌多種富媒體資源: JPEG、GIF、PNG位圖、SVG矢量圖(只能內(nèi)嵌) , SWF動(dòng)畫(非Flex的SWF應(yīng)用程序。),SWF庫(kù)按鈕(Button),SWF庫(kù)動(dòng)畫(MovieClip),
//外載一個(gè)富媒體,可使用絕對(duì)或者相對(duì)路徑。
但加入SWF文件時(shí),可用use-network參數(shù)指定其使用網(wǎng)絡(luò)或者本地文件二者之一。
<mx:Image id="myLogo0" source="assets/logo.png"/>
//簡(jiǎn)單地內(nèi)嵌一個(gè)富媒體.png,.jpg,.gif,
.swf(可將嵌入的SWF文件的實(shí)例當(dāng)作 MovieClip.MovieClipAsset 類的實(shí)例處理,
不能直接訪問嵌入的SWF文件的屬性或方法。
但可用 LocalConnection以允許SWF之間進(jìn)行通信。),
.SVG(可將嵌入的SVG文件的實(shí)例當(dāng)作Sprite.SpriteAsset類的實(shí)例處理。)
<mx:Image id="myLogo" source="@Embed('assets/logo.png')"/>
//在腳本中定義富媒體對(duì)象,然后在MXML中可以多次嵌入
<mx:Script>
<![CDATA[
[Embed(source="assets/logo.png")]
[Bindable]
public var Logo:Class;
]]>
</mx:Script>
<mx:Image id="myLogo" source="{Logo}"/>
<mx:Image id="myLogo2" source="{Logo}"/>
//在腳本中定義圖片的scale-9像框縮放功能就可以保持邊框的清晰,
(旋轉(zhuǎn)嵌入的scale-9 圖像的實(shí)例會(huì)關(guān)閉該圖像的scale-9功能。)。
<mx:Script>
<![CDATA[
[Embed(
source="assets/fancy_border.png",
scaleGridTop="55", scaleGridBottom="137",
scaleGridLeft="57", scaleGridRight="266"
)]
[Bindable]
public var FancyBorderImage:Class;
]]>
</mx:Script>
<mx:Image source="{FancyBorderImage}" width="146" height="82"/>
//嵌入 SWF 庫(kù)資源
<mx:Script>
<![CDATA[
[Embed(source="assets/library.swf", symbol="BadApple")]
[Bindable]
public var BadApple:Class;
]]>
</mx:Script>
<mx:Image id="badApple" source="{BadApple}" width="150"
height="151.8"/>
2) 設(shè)置翻轉(zhuǎn)的圖片:使用 CSS為外觀外載/內(nèi)嵌翻轉(zhuǎn)的圖像
可以定義一個(gè)現(xiàn)有的CSS類型選擇器為該類型的所有組件設(shè)置外觀。還可以進(jìn)一步創(chuàng)建自定義CSS 類。
<mx:Style>
Button
{
upSkin: Embed("assets/box_closed.png");
overSkin: Embed("assets/box.png");
downSkin: Embed("assets/box_new.png");
}
</mx:Style>
<mx:Button/>
3), SWFLoader控件: 通常用來加入Flex應(yīng)用程序(可以使用AS與其通信),當(dāng)然也能用于加入Image控件所能加入的富媒體資源。
//外載入SWF程序
<mx:SWFLoader id="loader1" source="FlexApp.swf"/>
//內(nèi)嵌入SWF程序
<mx:SWFLoader id="loader2" source="@Embed(source='flexapp.swf')"/>
//還可以在FDS環(huán)境下加入MXML文件,要以buttonicon.mxml.swf形式加入,以提示FDS編譯該文件。
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:SWFLoader source="buttonicon.mxml.swf" scaleContent="false"/>
</mx:Application>
4), 加入MP3音頻: 您可以在 Flex 應(yīng)用程序中通過使用[Embed]元數(shù)據(jù)標(biāo)簽嵌入MP3文件并播放它。注意音頻文件的體積要優(yōu)化。
<mx:Script>
<![CDATA[
import mx.core.SoundAsset;
import flash.media.*;
[Embed(source="assets/pie-yan-knee.mp3")]
[Bindable]
//MP3 的一個(gè)新實(shí)例
public var Song:Class;
//將該實(shí)例創(chuàng)建為一個(gè) SoundAsset
public var mySong:SoundAsset = new Song() as SoundAsset;
public var channel:SoundChannel;
//使用 SoundAsset 類的 play() 方法來播放 MP3 文件的實(shí)例
public function playSound():void
{
// 先消音,防止同時(shí)多次播放
stopSound();
// 播放該音頻,并存儲(chǔ)返回的SoundChannel對(duì)象結(jié)束播放。
channel = mySong.play();
}
public function stopSound():void
{
// 當(dāng)音頻播放時(shí),調(diào)用SoundChannel對(duì)象的 stop() 方法以停止播放
if ( channel != null ) channel.stop();
}
]]>
</mx:Script>
<mx:Button label="play" click="playSound();"/>
<mx:Button label="stop" click="stopSound();"/>
5), 加入字體: 您希望在 Flex 應(yīng)用程序中嵌入一種字體并將它用作基于文本的組件的樣式。
下面的示例創(chuàng)建引用嵌入的字體的 font-family 名稱的一個(gè)類選擇器。 接著它會(huì)創(chuàng)建一個(gè) Text 控件并將其樣式設(shè)置為該類選擇器。
提示: 您在嵌入字體以節(jié)省文件大小時(shí)僅可以從字體添加某些字符, 方法是指定您的 @font-face 聲明的 unicode-range 屬性。
<mx:Style>
@font-face
{
font-family: Copacetix;
src: url("assets/copacetix.ttf");
unicode-range:
U+0020-U+0040, /* Punctuation, Numbers */
U+0041-U+005A, /* Upper-Case A-Z */
U+005B-U+0060, /* Punctuation and Symbols */
U+0061-U+007A, /* Lower-Case a-z */
U+007B-U+007E; /* Punctuation and Symbols */
}
.MyTextStyle
{
font-family: Copacetix;
font-size: 24pt;
}
</mx:Style>
<mx:Text styleName="MyTextStyle" text="Embedded fonts rock!" width="100%"/>
三,數(shù)據(jù)綁定
以MXML標(biāo)記來描述UI,數(shù)據(jù)綁定(Data binding)來連接數(shù)據(jù),這樣就真正實(shí)現(xiàn)了UI和程序邏輯的分離。Data binding可以一綁多或者多綁一。
1, 在MXML中使用大括號(hào){}語句: 格式為:{源對(duì)象.屬性}??芍苯觽魉徒o目標(biāo)對(duì)象;高級(jí)用法是在{}中包含AS表達(dá)式、AS函數(shù)或者E4X表達(dá)式
2, 在MXML中使用<mx:Binding>標(biāo)簽:這是{}語句的替代用法,格式為:<mx:Binding source="源對(duì)象.屬性" destination="目標(biāo)對(duì)象.屬性"/>;高級(jí)用法是在標(biāo)簽中包含AS表達(dá)式或者E4X表達(dá)式
//在Model數(shù)據(jù)中使用{}語句來綁定數(shù)據(jù)
<mx:Model id="thing1">
<data>
<part>{input1.text}</part>
</data>
</mx:Model>
//用<mx:Binding>標(biāo)簽來綁定數(shù)據(jù)
<mx:Binding source="input2.text" destination="thing1.part"/>
<mx:TextInput id="input1"/>
<mx:TextInput id="input2"/>
<mx:TextArea text="{thing1.part}"/>
3, 使用AS類來綁定:使用mx.binding.utils.BindingUtils的bindProperty()或者bindSetter() 方法
四,界面布局和導(dǎo)航
容器定義了Flash Player的繪圖表面的一個(gè)矩形區(qū)域。子容器包括控件和容器。Container 類是所有 Flex 容器類的基本類。擴(kuò)展 Container 類的容器添加它們自己的功能以進(jìn)行子組件布局。Application 容器是的Flex應(yīng)用程序的唯一根部容器, 代表整個(gè) Flash Player 繪圖表面。
1,布局容器: 使用布局容器可進(jìn)行用戶界面布局。
A, 面板(Panel)容器
顯示一個(gè)標(biāo)題欄、一個(gè)標(biāo)題、一個(gè)邊框及其子級(jí)。默認(rèn)情況下, Panel 容器會(huì)對(duì)子組件進(jìn)行垂直布局, 并且可以通過將布局屬性設(shè)置為 "absolute" 或 "horizontal"來覆蓋此設(shè)置。
B, HDividedBox容器
對(duì)子組件進(jìn)行水平布局, 除了在子級(jí)之間插入一個(gè)可調(diào)整的分割線之外, 它與 HBox 容器很相似。 VDividedBox 容器對(duì)子組件進(jìn)行垂直布局, 而且也在子級(jí)之間插入一個(gè)可調(diào)整的分割線。
C, 平鋪(Tile)容器
以多行或多列的形式排列其子級(jí)。
D, 表單(Form)容器
以標(biāo)準(zhǔn)的表單格式排列其子級(jí)。
E, ApplicationControlBar 容器
容納提供全局導(dǎo)航和應(yīng)用程序命令的組件, 并可以??吭?Application 容器的上邊緣。
F, ControlBar容器將控件置于 Panel 或 TitleWindow 容器的下邊緣。
G, 另外可使用Spacer控件來輔助布局。Spacer控件并非容器,而是基于百分比的可用于擠占留空以準(zhǔn)確定位的一個(gè)不可見控件。
2, 導(dǎo)航容器: 使用導(dǎo)航容器可以控制其他容器的多個(gè)子級(jí)之間的用戶移動(dòng)或?qū)Ш健?dǎo)航器容器不能直接嵌套控件,只能嵌套容器。
A,手風(fēng)琴(Accordion)容器
定義一個(gè)子面板序列, 但一次僅顯示一個(gè)面板。 若要導(dǎo)航容器, 用戶會(huì)單擊與他們需要訪問的子面板相對(duì)應(yīng)的導(dǎo)航按鈕。 使用 Accordion 容器, 用戶可以按任何順序訪問子面板以在表單中前后移動(dòng)。
B, TabNavigator容器
創(chuàng)建和管理一組選項(xiàng)卡, 使用它們可在其子級(jí)中間導(dǎo)航。 TabNavigator 容器的子級(jí)是其他容器。 TabNavigator 容器為每個(gè)子級(jí)創(chuàng)建一個(gè)選項(xiàng)卡。 當(dāng)用戶選中某個(gè)選項(xiàng)卡時(shí), TabNavigator 容器會(huì)顯示相關(guān)聯(lián)的子級(jí)。
C, ViewStack容器
由彼此堆疊在一起的子容器的一個(gè)集合組成, 一次只有一個(gè)容器是可見的或活動(dòng)的。 ViewStack 容器不為用戶定義切換當(dāng)前活動(dòng)容器的內(nèi)置機(jī)制;您必須使用 LinkBar、TabBar、ButtonBar 或 ToggleButtonBar 控件或自己在 ActionScript 中構(gòu)建邏輯讓用戶來更改當(dāng)前活動(dòng)的子級(jí)。
3, 使用容器Containers進(jìn)行定位布局
定位方式有三種:
A, 自動(dòng)定位:多數(shù)Flex容器使用默認(rèn)預(yù)定義的規(guī)則來自動(dòng)定位你在其中定義的所有的子組件。
B, 使用絕對(duì)定位: 用于使控件重疊
C, 使用基于約束的布局: 可以錨定容器的邊緣或者中心點(diǎn),然后控件就會(huì)隨著容器的伸縮而伸縮
Canvas容器,和layout屬性為absolute的Application或Panel容器才能進(jìn)行絕對(duì)定位,或約束布局。
4,使用視圖狀態(tài)(或ViewStack導(dǎo)航容器)進(jìn)行用戶界面切換導(dǎo)航
可以為一個(gè)Flex程序或組件定義幾種視圖狀態(tài),然后通過改變(切換)視圖狀態(tài)而改變用戶界面。(ViewStack導(dǎo)航容器可實(shí)現(xiàn)同樣效果)
1),設(shè)計(jì)基礎(chǔ)狀態(tài)(Base state,Start,currentState=''):就是在默認(rèn)狀態(tài)下設(shè)計(jì)用戶界面。
2),設(shè)計(jì)視圖狀態(tài)(currentState='SomeState'):在設(shè)計(jì)模式中,在狀態(tài)查看(Window > States)上點(diǎn)擊新狀態(tài)/New State 按鈕。然后在此狀態(tài)下編輯的界面即為該視圖的對(duì)應(yīng)界面。
3),創(chuàng)建用戶行為切換控件: 定義用戶變換狀態(tài)的點(diǎn)擊事件處理器。一般是使用一個(gè)LinkButtun,激活currentState='SomeState'以切換到某界面,激活currentState=''以回到默認(rèn)界面。
五,使用CSS格式化組件
1. 文字橫豎排列Aligning Text Vertically & Horizontally
樣式對(duì)于定義Flex應(yīng)用程序的外觀和感覺 (外觀) 很有用。您可以使用它們來更改單一組件的外觀, 或在所有組件上應(yīng)用它們。
在 Flex 中應(yīng)用樣式有許多方法。 某些樣式提供更多粒度控制并能以編程方式被執(zhí)行。其他樣式不像那么靈活, 但可能需要較少的計(jì)算。在 Flex 中, 可以使用以下幾種方法將樣式應(yīng)用到控件:
1, 使用本地樣式定義
2, 使用外部樣式表
3, 使用線上樣式
4, 使用 setStyle() 方法
六,使用特效豐富用戶體驗(yàn)
1, 添加效果
1), 效果是在較短時(shí)間上發(fā)生的對(duì)組件的更改。 效果的例子有: 淡化組件、調(diào)整組件大小和移動(dòng)組件。 一種效果與一個(gè)觸發(fā)器相結(jié)合才能形成一個(gè)行為, 如組件上的鼠標(biāo)單擊、組件獲得焦點(diǎn)或組件變成可見的。 在 MXML 中, 您將效果應(yīng)用為控件或容器的屬性。 Adobe? Flex? 提供具有默認(rèn)屬性的一組內(nèi)置效果。
作為對(duì)某些用戶或編程操作的響應(yīng), 行為使您可以將動(dòng)畫、動(dòng)作和聲音添加到應(yīng)用程序中。 例如, 您可使用行為在獲得焦點(diǎn)時(shí)彈出對(duì)話框, 或是在用戶輸入無效的值時(shí)發(fā)出聲音。
Flex 觸發(fā)器屬性是作為層疊樣式表 (CSS) 樣式被實(shí)施的。 在 Adobe Flex 2 語言參考中, 觸發(fā)器被列出在標(biāo)題“效果”的下面。
若要?jiǎng)?chuàng)建行為, 您定義一個(gè)具有唯一 ID 的特定效果并將它綁定到觸發(fā)器。 例如, 下面的代碼創(chuàng)建兩個(gè)縮放效果: 一個(gè)用于輕微縮小組件, 一個(gè)用于將組件還原至其原始大小。 這些效果通過使用它們的唯一 ID 被分配到“按鈕”組件上的 mouseDownEffect 和 mouseUpEffect 觸發(fā)器上。
注意如何將 Panel 容器的 autoLayout 屬性設(shè)置為 "false"。這樣是為了阻止在按鈕改變大小時(shí)面板改變大小。
2),使用效果方法和事件
您可以調(diào)用效果上的方法來改變它們播放的方式。 例如, 可以通過調(diào)用效果的 pause() 方法來暫停效果, 并通過使用其 resume() 方法來繼續(xù)該效果??梢酝ㄟ^調(diào)用效果的 end() 方法來結(jié)束該效果。
當(dāng)效果開始和效果結(jié)束時(shí), 它也會(huì)發(fā)出 startEffect 和 endEffect 事件。 您可以監(jiān)聽這些事件并響應(yīng)您的事件狀態(tài)中的更改。
下面的示例使用“移動(dòng)”效果的方法和事件來創(chuàng)建一個(gè)簡(jiǎn)單的游戲。 該游戲的目標(biāo)是使直升飛機(jī)盡可能接近靶而又不撞到它。 靠得越近, 贏得的點(diǎn)數(shù)越多。
3, 使用過渡增加用戶界面切換效果
過渡(transition,變換)是定義在視圖狀態(tài)切換之間播放的一種或多種視覺效果。過渡不會(huì)替換效果;即, 您仍可以將單一效果應(yīng)用到一個(gè)組件, 并通過使用一個(gè)效果觸發(fā)器或者 playEffect()方法來調(diào)用該效果。創(chuàng)建過渡樣例如下:
<mx:transitions>
//fromState 屬性指定當(dāng)應(yīng)用該過渡時(shí)您要更改的視圖狀態(tài)
//toState 屬性指定您要更改為的視圖狀態(tài)
//effect 屬性是對(duì)要播放的 Effect 對(duì)象的引用
<mx:Transition id="myTransition" fromState="*" toState="Advanced">
//<mx:Parallel> 和 <mx:Sequence> 標(biāo)簽分別引發(fā)并行或按順序播放的效果
<mx:Parallel target="{myVBox}">
//效果標(biāo)簽
<mx:WipeDown duration="2000"/>
<mx:Dissolve alphaFrom="0.0" alphaTo="1.0" duration="2000"/>
</mx:Parallel>
</mx:Transition>
</mx:transitions>
4, 為用戶提供工具提示
Adobe Flex ToolTip 使您能夠?yàn)槟挠脩籼峁┯袔椭男畔?。?dāng)用戶在圖形組件上移動(dòng)鼠標(biāo)指針時(shí), 會(huì)彈出包含文本信息的工具提示。您可以使用工具提示來指導(dǎo)用戶完成使用應(yīng)用程序或自定義它們來提供其他功能。
擴(kuò)展 UIComponent 類 (該類實(shí)現(xiàn) IToolTipManagerClient 界面) 的每個(gè)可視 Flex 組件都支持 toolTip 屬性。您將 toolTip 屬性的值設(shè)置為一個(gè)文本字符串, 并且, 當(dāng)鼠標(biāo)指針懸停在該組件上時(shí), 會(huì)顯示該文本字符串。
盡管長(zhǎng)消息很難讀取, 但對(duì)工具提示文本的大小不存在任何限制。當(dāng)工具提示文本達(dá)到工具提示框的寬度時(shí), 文本會(huì)自動(dòng)換至下一行。可以在工具提示文本中添加換行符。在 ActionScript 中, 您使用 /n 轉(zhuǎn)義的新行字符。在 MXML 標(biāo)簽中, 您使用 XML 實(shí)體。
可以通過使用層疊樣式表 (CSS) 語法或 mx.styles.StyleManager 類更改工具提示文本和工具提示框的外觀。對(duì)工具提示樣式的更改適用于當(dāng)前應(yīng)用程序中的所有工具提示。
5, 控制光標(biāo)
使用Flex光標(biāo)管理器可以控制 Flex 應(yīng)用程序中的光標(biāo)圖像。 例如, 如果應(yīng)用程序執(zhí)行的處理需要用戶等待, 直到處理完成為止, 則可以將光標(biāo)更改為某個(gè)自定義的光標(biāo)圖像, 比如沙漏, 以使它反映該等待期。
您還可以更改光標(biāo)以向用戶提供反饋, 指示用戶可以執(zhí)行的操作。 例如, 您可以使用一個(gè)光標(biāo)圖像來指示用戶輸入被啟用, 而使用另一個(gè)光標(biāo)圖像來指示輸入被禁用。
CursorManager 類控制一個(gè)光標(biāo)優(yōu)先順序列表, 在其中具有最高優(yōu)先級(jí)的光標(biāo)當(dāng)前是可見的。 如果光標(biāo)列表包含具有相同優(yōu)先級(jí)的多個(gè)光標(biāo), 則光標(biāo)管理器會(huì)顯示最近創(chuàng)建的光標(biāo)。
1), 使用默認(rèn)的忙光標(biāo)
Flex 定義了一個(gè)默認(rèn)的忙光標(biāo), 可用來指示應(yīng)用程序正在處理, 且在應(yīng)用程序?qū)τ脩糨斎胱鞒鲰憫?yīng)之前, 用戶應(yīng)等待, 直到處理完成。 默認(rèn)的忙光標(biāo)是一個(gè)動(dòng)畫時(shí)鐘。
可以使用以下幾種方式來控制忙光標(biāo):
- 可以使用 CursorManager 方法來設(shè)置和刪除忙光標(biāo)。
- 可以使用 SWFLoader、WebService、HttpService 和 RemoteObject 類的 showBusyCursor 屬性自動(dòng)顯示忙光標(biāo)。
下面的示例使用 CursorManager 類的靜態(tài) setBusyCursor() 和 removeBusyCursor() 方法, 根據(jù)切換按鈕的狀態(tài)顯示和隱藏默認(rèn)的 Flex 忙光標(biāo)。
2), 使用自定義光標(biāo)
可以使用 JPEG、GIF、PNG 或 SVG 圖像, Sprite 對(duì)象或 SWF 文件作為光標(biāo)圖像。
若要使用光標(biāo)管理器, 您將 mx.managers.CursorManager 類導(dǎo)入到應(yīng)用程序中, 然后引用其屬性和方法。
下面的示例嵌入一個(gè)在 Adobe Flash 中創(chuàng)建的沙漏的 SWF 動(dòng)畫, 并將它用作一個(gè)自定義光標(biāo)。 在該示例中, 創(chuàng)建自定義光標(biāo)的方法是, 調(diào)用 CursorManager 類的 setCursor() 靜態(tài)方法, 然后將它傳送給對(duì)您希望用作自定義光標(biāo)的嵌入資源的類的引用。 可以通過調(diào)用 CursorManager 類的 removeCursor() 靜態(tài)方法并將它傳送給 CursorManager 類的 currentCursorID 靜態(tài)屬性來刪除活動(dòng)的自定義光標(biāo)。
七,使用ActionScript處理事件
1, 事件模型與機(jī)制
Flex的事件模型基于DOM3事件模型。通過創(chuàng)建注冊(cè)事件監(jiān)聽器(事件處理程序,事件處理器,是函數(shù)方法用于響應(yīng)指定的事件),可以在組件的實(shí)例 發(fā)出某個(gè)事件(如用戶何時(shí)與界面組件交互, 以及在組件的外觀或生命周期中何時(shí)發(fā)生重要的變化, 如組件的創(chuàng)建或破壞或調(diào)整其大小等)時(shí), 對(duì)象事件自動(dòng)派發(fā)此事件到所有注冊(cè)過的監(jiān)聽器。
1),事件流:當(dāng)一個(gè)事件被派發(fā)出來時(shí), 事件對(duì)象從根節(jié)點(diǎn)開始自上而下開始掃描display list(如), 一直到目標(biāo)對(duì)象, 檢查每個(gè)節(jié)點(diǎn)是否有相應(yīng)的監(jiān)聽器。目標(biāo)對(duì)象指的是display list中產(chǎn)生事件的對(duì)象. 比如:<mx:Panel><mx:HBox><mx:VBox><mx:Button /></mx:VBox></mx:HBox></mx:Panel>。如果此時(shí) resize了VBox, 則會(huì)從根(Application)開始, 下來檢查Panel, HBox, 直到目標(biāo)對(duì)象-產(chǎn)生resize事件的VBox為止.
2), 事件的派發(fā) Flex中可以通過dispatchEvent()方法手工派發(fā)事件, 所有UIComponent的子類都可以調(diào)用此方法. 語法:
//參數(shù)event_type是Event對(duì)象的type屬性
//函數(shù)的返回值總是True.
objectInstance.dispatchEvent(new Event("event_type"):Boolean
可以使用此方法派發(fā)任意事件, 而不僅僅是用戶自定義事件, 比如: 可以派發(fā)一個(gè)Button的Click事件. var result:Boolean = buttonInstance.dispatchEvent(new Event(MouseEvent.CLICK));
在Flex應(yīng)用中不是必須對(duì)新派發(fā)的事件進(jìn)行處理, 如果觸發(fā)了一個(gè)事件, 而沒有對(duì)應(yīng)的Listener時(shí),Flex忽略此事件.
如果想給Event對(duì)象添加新屬性, 就必須繼承Event類,然后定義新屬性
3), 事件的傳播
事件觸發(fā)后, Flex有3個(gè)檢測(cè)事件監(jiān)聽器的階段, 3個(gè)階段的發(fā)生的順序如下:
A. 捕獲階段:在捕獲階段,Flex在顯示列表中檢查事件的祖先是否注冊(cè)了事件的監(jiān)聽器. Flex從根節(jié)點(diǎn)開始順序而下. 大多數(shù)情況中, 根節(jié)點(diǎn)是Application對(duì)象. 同時(shí), Flex改變事件的currentTarget值. 缺省情況下, 在此階段,沒有容器監(jiān)聽事件. use_capture參數(shù)的值是False,在此階段添加監(jiān)聽的唯一方法是在調(diào)用add_listener時(shí),傳入一個(gè)為True值的 use_capture參數(shù), 比如:
myAccordion.addEventListener(MouseEvent.MOUSE_DOWN, customLogEvent, true);
如果是在Mxml中添加監(jiān)聽, Flex設(shè)置此參數(shù)為False, 沒有辦法進(jìn)行修改. 如果設(shè)置了use_capture為True, 那么事件將不會(huì)上浮. 如果既想捕獲又想上浮就必須調(diào)用 addEventListener兩次. 一次use_capture參數(shù)為true, 一次為false; 捕獲很少使用, 上浮的使用更為普遍.
B. 目標(biāo)階段: 在目標(biāo)階段, Flex激發(fā)事件的監(jiān)聽程序, 不檢查其他的節(jié)點(diǎn).
C. 上浮階段:事件只在bubbles屬性為True時(shí)才進(jìn)行上浮. 可以上浮的事件包括: change, click, doubleClick, keyDown, keyUp, mouseDown, mouseUp. 在上浮階段, Flex改變事件的currentTarget屬性, 而target屬性是初始派發(fā)事件的對(duì)象.
在任意一個(gè)階段, 節(jié)點(diǎn)們都有機(jī)會(huì)操作事件. 比如: 用戶點(diǎn)擊了一個(gè)在VBox中的Button,在捕獲階段, Flex檢查Application對(duì)象(根節(jié)點(diǎn))和VBox是否有監(jiān)聽器處理此事件. Flex然后在目標(biāo)階段觸發(fā)按鈕的監(jiān)聽器.在上浮階段, VBox和應(yīng)用以與捕獲階段相反的順序再次獲得機(jī)會(huì)處理事件.
在Actionscript3.0中,你可以在任意目標(biāo)節(jié)點(diǎn)上注冊(cè)事件監(jiān)聽器. 但是部分事件會(huì)被直接傳給目標(biāo)節(jié)點(diǎn),比如Socket類. 捕獲階段的節(jié)點(diǎn)順序是從父節(jié)點(diǎn)到子節(jié)點(diǎn)的, 而上浮階段剛好相反.
捕獲事件缺省是關(guān)閉的,也就是說如果要捕獲事件, 必須顯式指定在捕獲階段進(jìn)行處理.
每一個(gè)Event都有target和currentTarget屬性, 幫助跟蹤事件傳播的過程.
4), 查詢事件階段
使用事件的eventPhase可以獲得事件當(dāng)前的階段,
1): CAPTURE_PHASE
2): AT_TARGET
3): BUBBLING_PHASE
示例: private function determineState(event:MouseEvent):Void { Debug.trace(event.eventPhase + ":" + event.currentTarget.id); }
5), 停止傳播
使用下面兩個(gè)函數(shù)停止事件的傳播:
stopPropagation()
stopImmediatePropagation()
2, 創(chuàng)建監(jiān)聽器
組件有Flex提供的內(nèi)建事件. 也可以使用派發(fā)-監(jiān)聽模型定義自己的事件監(jiān)聽器, 并指定監(jiān)聽器監(jiān)聽何種事件.
有三種方式:
1), 內(nèi)部MXML中的AS函數(shù)法: 在MXML的<mx:Script></mx:Script>聲明中注冊(cè)監(jiān)聽器: 這是第一個(gè)和使用最廣泛的方法,在 MXML 中定義事件發(fā)生時(shí)會(huì)調(diào)用的事件處理程序。
2), 外部AS文件中的AS函數(shù)法:通過ActionScript定義注冊(cè)事件處理程序: 可以通過使用ActionScript 中的 addEventHandler() 等方法來注冊(cè)事件處理程序。 可將 addEventHandler() 方法置于 Application 容器的 creationComplete 事件(在 Application 表單及其子級(jí)被初始化之后, 在啟動(dòng)應(yīng)用程序時(shí)發(fā)生)的事件處理程序中。 詳見Action Script教程。
3), 代碼混寫法: 在MXML的控件標(biāo)簽中直接完全嵌入監(jiān)聽器(這也稱為使用線上事件處理程序): 這樣比較直接,代碼也較少,但會(huì)導(dǎo)致代碼很難閱讀、維護(hù)和縮放。如果監(jiān)聽器是多個(gè)AS語句甚至更復(fù)雜的邏輯,不推薦此方法。
六,數(shù)據(jù)服務(wù)器訪問概述
Flex 被設(shè)計(jì)為可以與許多類型的服務(wù)器打交道,從而提供對(duì)本地和遠(yuǎn)端邏輯的訪問。提供數(shù)據(jù)訪問的MXML 組件被稱之為數(shù)據(jù)服務(wù)器組件(data service components)。MXML 包含了如下幾種類型的數(shù)據(jù)服務(wù)器組件:
1. HTTPService 提供對(duì)返回?cái)?shù)據(jù)的HTTP URLs 的訪問。通過 Http get/post 來傳遞純文字資料。好處是非常普及于所有的后臺(tái),但缺點(diǎn)則是復(fù)雜的數(shù)據(jù)類型要經(jīng)過復(fù)雜的序列化與解序列化程序才能在client/server間交換。
2. WebService 提供對(duì)使用SOAP 的web 服務(wù)器的訪問。WebService 也是很常見的選擇,好處是規(guī)則共通,方便不同技術(shù)平臺(tái)交換資料,缺點(diǎn)則同樣是某些復(fù)雜數(shù)據(jù)結(jié)構(gòu)無法輕易的交換,在編碼與譯碼的過程中往往會(huì)出現(xiàn)意外,例如 Date 的表現(xiàn)方式。以 .NET 來說,使用 web service 應(yīng)該是再方便不過的選擇,只要把 asmx 檔案準(zhǔn)備好再?gòu)?flex client 呼叫即可。
3. RemoteObject(Flash Remoting) 技術(shù):官方支持的平臺(tái)有三種,分別是 Java Coldfusion(但實(shí)際上Coldfusion應(yīng)該只算是java的subset,它是一種 scripting tag library)與.NET。Flex Data Services 或Macromedia ColdFusion MX 7.0.2通過使用AMF協(xié)議提供對(duì)Java 對(duì)象(Java Beans、EJBs、POJOs)的訪問。
4,其它非官方RemoteObject?技術(shù): 由于AMF格式已被非官方反編譯,所以有許多開源的remoting替代方案:
A,AMFPHP: 這是php版的remoting
B,OPENAMF: java版的remoting
C,F(xiàn)lap: Perl 與Python版的remoting
S,F(xiàn)lashORB: 商業(yè)版的remoting替代方案,目前支持java與.net
七,HTTPService
使用plaine text format的傳輸方式,通過xml, loadVars, loadVariables 等方式
外部XML讀取 Actionscript 3.0 的賣點(diǎn)之一,就是加強(qiáng)XML讀取的方便性,讀取外部XML是常用的前後端整合手段,而XML節(jié)點(diǎn)的操作,比之前AS2用DOM更直觀,可以直接運(yùn)用標(biāo)籤與屬性名稱訪問節(jié)點(diǎn)。
主要參考章節(jié): Reading external XML documents Traversing XML structures
Lesson 6: RETRIEVING XML DATA (37 min) 1. Setting Up an XML Data Project & Setting HTTP Service 2. Setting Up a DataGrid to Display XML Data 3. Adding a Label Control to a DataGrid 4. Using an ArrayCollection 5. Examining a Data Structure in Debugging Mode 6. Utilizing Data Returned in an Event Object 7. Using the HTTP Service Class to Catch Faults 8. Creating a Cross Domain Security File
Lesson 13: MANIPULATING XML (34 min) 1. Manipulating Client Side Data Using E4X Syntax 2. Creating a Tree Control to Display the XML Data 3. Adding a Change Event to Display Data from the Tree 4. Populating the Shopping Cart with Raw XML Content 5. Working with an XML List Collection 6. Using Conditional Logic to Compare & Update Values
八,WebService
Lesson 14: USING WEB SERVICES (25 min) 1. Accessing Web Services 2. Invoking Web Services Methods & Results 3. Using a FaultHandler? 4. Call Multiple Methods from One Web Service Object 5. Passing Parameters to Web Services
九,F(xiàn)lex Data Services
FDS (Data Service, Messaging)
Flex Data Service 是 Flex 2 里新出現(xiàn)的技術(shù),主要目地是希望提供更自動(dòng)的方法來讓 client 與 server 交換資料,它的核心實(shí)際上仍然是 AMF 與 RTMP (對(duì),就是 Flash Media Server 用的那種),部份功能也與 FMS 重疊,但它著重在 Data Sharing 與 Exchange 這部份。
目前 FDS 只有 Java 的版本,也就是 server 端要用 java 寫,但 Adobe 宣稱將來會(huì)有 FDS for .NET 版。不過好消息是,有一家叫 theMidnightCoders? 的公司搶先推出了 FDS 兼容版本,不但同時(shí)支持 AMF0 與 AMF3,更支持部份 FDS 的功能(主要是資料同步的部份,與server端的沖突處理與資料儲(chǔ)存)。
以 .NET 來說,付費(fèi)的選擇中 weborb 算是目前最優(yōu)的選擇,價(jià)錢只有官方版的一半,但功能更完整;而免錢的選擇則當(dāng)非 Fluorine 莫屬。
功能描述:如果你有Flex Data services,你可以發(fā)布一組MXML和AS文件,F(xiàn)lex Data Services可以在收到Http請(qǐng)求前,把你的MXML和AS文件編譯成Swf文件。
Flex執(zhí)行以下步驟:
1. 編譯MXML并產(chǎn)生一個(gè)SWF文件
2. 貯藏已編譯的MXML文件
3. 向安戶端返回SWF文件
發(fā)布你的程序方法一:發(fā)布一個(gè)SWF文件
訪問方法:http://hostname/path/filename.swf
方法二:發(fā)布MXML和AS文件
訪問方法:http://hostname/path/filename.mxml
FDS在你的Java服務(wù)器上或者Java容器內(nèi)運(yùn)行。以保證在以下幾個(gè)特征領(lǐng)域的廣泛性
1>多個(gè)客戶端的數(shù)據(jù)共享
1. 支持C2C的數(shù)據(jù)通訊
2. 服務(wù)器端數(shù)據(jù)增加
3. 安戶端訪問服務(wù)器資源的證明
4. 數(shù)據(jù)服務(wù)日志
2>提高RPC的廣泛性
十,其它RemoteObject技術(shù)
現(xiàn)有許多非官方的開源RemoteObject?(Flash Remoting)技術(shù),流行的服務(wù)端(Java、Php、.Net、Perl/Python?、Ruby)技術(shù)Flex都已打通,您可以直接在Flex /Flash?中通過RemoteObject?直接調(diào)用 A,AMFPHP: Flash和PHP的整合 AMFPHP
B,AMF.NET: Flex調(diào)用不同參數(shù)類型的.Net WebMethod
C,AMF::Perl
D,RubyAmf
E,與JAVA:
F,和ASP的整合:Flash2ASP是能自動(dòng)生成ASP和AS代碼的工具。雖然Flash2ASP作后臺(tái)速度不如AMFphp,但由于國(guó)內(nèi)ASP資源豐富,而且Flash2ASP教程文檔詳細(xì),也可作為一個(gè)選擇。
在線版說明圖
55分鐘詳細(xì)使用方法以及留言簿范例視頻教程
本地運(yùn)行版下載(exe)
詳細(xì)情況
十一, 創(chuàng)建自定義組件
1, Flex是由as類結(jié)構(gòu)實(shí)現(xiàn)的。類結(jié)構(gòu)包含了組件類,管理類,數(shù)據(jù)服務(wù)類,和其他用來實(shí)現(xiàn)flex功能的類。下圖展示的是類結(jié)構(gòu)中flex可視化組件的一部分,關(guān)于控制和容器的部分:
所有的可視化組件繼承自UIComponent as類。Flex中非可視化組件也是依靠as類結(jié)構(gòu)來實(shí)現(xiàn)的。大部分的非可視化組件都是Validator,F(xiàn)ormatter,或者是Effect 類。
通過使用mxml和as語言擴(kuò)展Flex類結(jié)構(gòu)來創(chuàng)建自定義的組件。組件都繼承了父類的屬性,方法,行為,風(fēng)格和效果。
通過as創(chuàng)建一個(gè)flex組件時(shí),必須繼承自一個(gè)flex類。類的名稱必須和類文件的名稱相同。子類繼承了父類的所有屬性的和方法。在mxml中使 用這個(gè)組件時(shí),通過使用類名稱的標(biāo)簽來引用。例如,類名稱是myASButton,文件名則為myASButton.as,在mxml中使用< myASButton>標(biāo)簽來使用組件。
在通過mxml創(chuàng)建一個(gè)組建時(shí),flex編譯器將自動(dòng)的生成一個(gè)as類。mxml文件的名稱必須和as類名稱相同。同樣,在mxml中使用這個(gè)名稱標(biāo)簽來使用這個(gè)組件。
下圖展示了分別通過as和mxml創(chuàng)建的Flex Button組件的自定義組件:
Button.as
MyASButton.as
package
{
public class MyASButton extends Button
{
//Override inherited methods and properties.
//Define new methods and properties.
//Define custom logic in ActionScript.
}
}
<mx:Button>
<ms:Script>
//Override inherited methods and properties.
//Define new methods and properties.
//Define custom logic in ActionScript.
</mx:Script>
<!-- Add MXML code. -->
</mx:Button>
上面的兩種實(shí)現(xiàn)方法都生成了一個(gè)Button類的子類。同樣的繼承了所有的屬性,方法和button類的所有元素。都可以重寫類的屬性,方法和邏輯。
注意:父類中的變量是不能被覆蓋,但是可以覆蓋通過setter和getter方法實(shí)現(xiàn)的屬性。你可以重新設(shè)置這些變量的值。
另外,如果使用mxml創(chuàng)建組建,flex編譯器完成了創(chuàng)建一個(gè)組件的子類的大部分工作,因此使用mxml創(chuàng)建組件比用as創(chuàng)建組件更加容易。
2, 決定是使用mxml還是as創(chuàng)建組件
在創(chuàng)建組件之前需要做的一個(gè)首要決定是,使用as還是mxml。由你需要開發(fā)應(yīng)用程序來決定你需要使用什么樣的組件。
下面是一些基本的指導(dǎo)方針:
mxml和as組件都定義了新的as類?;旧纤心苡胊s完成的自定義組件都可以通過mxml來實(shí)現(xiàn)。一般來說,對(duì)于簡(jiǎn)單的自定義組建,例如修改 已有組建的一些屬性和方法,使用mxml要比使用as方便得多。當(dāng)你在新的組件中使用了別的組建,而且需要使用flex layout容器來進(jìn)行多個(gè)組件的布局設(shè)置,那么需要使用mxml來定義。如果你想修改某一個(gè)組件的行為,例如一個(gè)容器中子元素的布局方式,則使用as。 如果你想通過創(chuàng)建UIComponent的子類來創(chuàng)建一個(gè)全新的可視化組件,則使用as。如果你想創(chuàng)建一個(gè)全新的非可視化組件,例如formatter, validator,或者effect,則使用as。注意:Flash Professional 8是不能開發(fā)AS3.0的組件的,如果要使用AS3.0開發(fā)Flex2組件,應(yīng)該使用Flex Builder IDE。
3, 組件部署
在部署你的mxml或as文件的自定義組件時(shí),一般將這些文件放置在你的應(yīng)用程序的子目錄內(nèi),或者一個(gè)定義好的as類路徑下。
為了保密,你可能不希望使用源碼的形式來部署你的源文件。因此你可以使用swc文件或者共享資源庫(kù)(RSL)作為用來部署的文件。
Swc文件是Flex組件的一種集合格式。使用swc文件可以方便的在開發(fā)人員之間進(jìn)行交流,這樣你使用使用一個(gè)文件,而不是很多mxml,as文件,或者圖片和其他資源。更重要的是,swc文件中的swf已經(jīng)被編譯了,這意味著你不用看著繁雜的代碼。
Swc文件可以包含多個(gè)組件,使用PKZip打包格式將其打包在一起。你可以使用winzip,jar或者任何打包工具來打開這個(gè)文件。但是,一般來說不要直接在swc外部運(yùn)行打包在swc里面的swf文件。
創(chuàng)建swc文件,需要使用compc工具,該工具在flex安裝目錄下的bin目錄內(nèi)。compc工具可以將mxml文件,或as文件,或兩種文件一起,打包成swc文件。
要縮小你的swf格式的應(yīng)用程序的大小,有一種方式是將共享資源打包到文件外部,由client下載并保存在緩存中。這些外部職員可以在程序運(yùn)行的時(shí)候多次被使用,但是只需要從服務(wù)器傳輸?shù)絚lient端一次。這些文件就是共享資源庫(kù)(RSL)。
參見
Flex Remote Object中直接使用HttpSession的方法
Flash Remoting 教學(xué) 1 - 下載、安裝與hello world
在Flex Data Services 2中使用RPC服務(wù)(簡(jiǎn)體)
Flex 2 Advanced: Using Data Services
Flex 答客問2:Flex 2 and .NET, a nice pair ?
========================================================================================
Flex 中用repeater循環(huán)輸出checkbox并在代碼中遍歷checkbox
repeater:
<mx:Repeater id="rep2" dataProvider="{part.ComponentList}">
<mx:CheckBox
id="cb3"
label="{rep2.currentItem.ComponentId + '[' + rep2.currentItem.ComponentCharge + ']' }"
data="{rep2.currentItem}"
click="CheckBoxChangeHandel()"
/>
</mx:Repeater>
遍歷代碼:
for (var i:Number = 0; i < cb3.length; i++)
{
if (cb3[i].selected)
{
items.addItem(cb3[i].data as Component);
}
}
說明:
在flex中循環(huán)出來的同一id的控件是個(gè)數(shù)組
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
