Adobe? Flex?應(yīng)用程序是事件驅(qū)動的。當(dāng)用戶與界面組件交互時事件會通知程序員,
當(dāng)一個組件的外觀或者生命周期發(fā)生重要改變,比如創(chuàng)建或者銷毀一個容器,或改 變一個容器的大小的時候,事件也會通知程序員。
當(dāng)一個組件的實(shí)例分派一個事件時,你為那個事件注冊的監(jiān)聽器對象就會被通知。 你可以在 ActionScript 中定義事件監(jiān)聽器(或者叫做事件處理器)來處理事件。你 既可以在 MXML 聲明中為一個組件注冊事件監(jiān)聽器,也可以在 ActionScript 中實(shí)現(xiàn) 相同的功能。
接收事件通知有三種方式:
??在 MXML 中注冊一個事件處理器
??在 MXML 中創(chuàng)建一個內(nèi)聯(lián)(inline)的事件處理器
??通過 ActionScript 注冊一個事件處理器
在 MXML 中注冊一個事件處理器
第一個,而且是最廣泛地被用來接收事件通知的方法就是在 MXML 中定義一個事件處 理器,當(dāng)事件發(fā)生時就調(diào)用它。
在這個例子中,你為一個 Button 控件的 click(點(diǎn)擊)事件定義了一個事件處理器。 當(dāng)用戶點(diǎn)擊這個 Button 控件時,事件處理器會把 Label 控件的 text 屬性設(shè)成? "Hello,World!"。
示例
<?xml? version="1.0"? encoding="utf-8"?>
<mx:Application
xmlns:mx="
http://www.adobe.com/2006/mxml
"
width="300"? height="200"
horizontalAlign="center"? verticalAlign="middle"
viewSourceURL="src/HandlingEventsEventHandler/index.html">
<mx:Script>
<![CDATA[
import? flash.events.MouseEvent;
private? function? clickHandler? (? event:MouseEvent? ):void
{
myLabel.text? =? "Hello,World!";
}?
]]>?
</mx:Script>
<mx:Panel
title="My? Application"? horizontalAlign="center"
paddingTop="10"? paddingBottom="10"? paddingLeft="10"
paddingRight="10"? >
<mx:Label? id="myLabel"? width="180"? fontWeight="bold"
fontSize="24"/>?
<mx:Button? id="myButton"? label="Click? Me!"?
click="clickHandler(event);"? />?
</mx:Panel>
</mx:Application>
運(yùn)行結(jié)果圖示:
譯注:由于文檔中無法嵌入 SWF 文件,代碼運(yùn)行結(jié)果請查看原文中相應(yīng)的部分。
?在 MXML 中創(chuàng)建一個內(nèi)聯(lián)(inline)的事件處理器
?有時響應(yīng)事件的最簡單的方法就是完全在一個組件的 MXML 聲明中定義事件處理器。 這就是使用一個內(nèi)聯(lián)(inline)的事件處理器。
?在下面的例子中,你設(shè)定了<mx:Button>標(biāo)簽的click屬性,所以它可以直接設(shè)定 Label控件的text屬性,而不需要調(diào)用一個事件處理器方法。
提示:使用內(nèi)聯(lián)事件處理器可能比較快而且代碼較少,但是它也可以影響代碼的易讀性,可維護(hù)性和可擴(kuò)展性。一個好的經(jīng)驗(yàn)法則就是不要在內(nèi)聯(lián)事件處理器中包含 一條語句以上的 ActionScript。如果你必須包含更復(fù)雜的邏輯,就把它放到一個 ActionScript helper 方法(即第一種方法)或者一個 ActionScript 事件處理器(即 第三種方法)中。
示例
<?xml? version="1.0"? encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
viewSourceURL="src/HandlingEventsInlineMethod/index.html"
horizontalAlign="center"? verticalAlign="middle"
width="300"? height="200">
<mx:Panel?
title="My? Application"? horizontalAlign="center"?
paddingTop="10"? paddingBottom="10"? paddingLeft="10"
paddingRight="10">?
<mx:Label? id="myLabel"? width="180"? fontWeight="bold"?
fontSize="24"/>?
<mx:Button? id="myButton"? label="Click? Me!"? click="myLabel.text? =
'Hello,? World!'"? />?
</mx:Panel>
</mx:Application>
運(yùn)行結(jié)果圖示:
通過 ActionScript 注冊一個事件監(jiān)聽器
你也可以通過使用 ActionScript 注冊一個事件處理器來響應(yīng)事件。 在這個例子中,使用ActionScript中的addEventHandler()? 方法注冊了一個事件監(jiān)
聽器。這個addEventHandler()方法被放在了用來處理Application容器的
creationComplete事件的事件處理器中。
提示:程序開始運(yùn)行的時候,在Application的外觀和它的子組件初始化完畢之后, Application的creationComplete事件就會發(fā)生。creationComplete事件的處理器提 供了一個很方便的地方來放置注冊事件監(jiān)聽器的ActionScript代碼。
示例
<?xml? version="1.0"? encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
viewSourceURL="src/HandlingEventsActionScript/index.html"
horizontalAlign="center"? verticalAlign="middle"
width="300"? height="200"
creationComplete="creationCompleteHandler(event);">
<mx:Script>?
<![CDATA[?
import? flash.events.MouseEvent;
import? mx.events.FlexEvent;?
private? function
creationCompleteHandler(event:FlexEvent):void
?
{
clickHandler);
}
?//? Listen? for? the? click? event? on? the? Button? control
myButton.addEventListener? (MouseEvent.CLICK,
?private? function? clickHandler? (? event:Event? ):void
{
myLabel.text? =? "Hello,? World!";
}?
]]>?
</mx:Script>
<mx:Panel
title="My? Application"? horizontalAlign="center"
paddingTop="10"? paddingBottom="10"? paddingLeft="10"
paddingRight="10">
<mx:Label? id="myLabel"? width="180"? fontWeight="bold"
fontSize="24"/>?
<mx:Button? id="myButton"? label="Click? Me!"? />?
</mx:Panel>
</mx:Application>
運(yùn)行結(jié)果圖示:
小編物語:本文援引 Dreamer's Blog ,特此感謝作者的努力。大家如果覺得這篇教程正是你所需要的話,請別忘了去作者的博客打打氣啊。