Adobe? Flex?應用程序是事件驅動的。當用戶與界面組件交互時事件會通知程序員,
當一個組件的外觀或者生命周期發生重要改變,比如創建或者銷毀一個容器,或改 變一個容器的大小的時候,事件也會通知程序員。
當一個組件的實例分派一個事件時,你為那個事件注冊的監聽器對象就會被通知。 你可以在 ActionScript 中定義事件監聽器(或者叫做事件處理器)來處理事件。你 既可以在 MXML 聲明中為一個組件注冊事件監聽器,也可以在 ActionScript 中實現 相同的功能。
接收事件通知有三種方式:
??在 MXML 中注冊一個事件處理器
??在 MXML 中創建一個內聯(inline)的事件處理器
??通過 ActionScript 注冊一個事件處理器
在 MXML 中注冊一個事件處理器
第一個,而且是最廣泛地被用來接收事件通知的方法就是在 MXML 中定義一個事件處 理器,當事件發生時就調用它。
在這個例子中,你為一個 Button 控件的 click(點擊)事件定義了一個事件處理器。 當用戶點擊這個 Button 控件時,事件處理器會把 Label 控件的 text 屬性設成? "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>
運行結果圖示:
譯注:由于文檔中無法嵌入 SWF 文件,代碼運行結果請查看原文中相應的部分。
?在 MXML 中創建一個內聯(inline)的事件處理器
?有時響應事件的最簡單的方法就是完全在一個組件的 MXML 聲明中定義事件處理器。 這就是使用一個內聯(inline)的事件處理器。
?在下面的例子中,你設定了<mx:Button>標簽的click屬性,所以它可以直接設定 Label控件的text屬性,而不需要調用一個事件處理器方法。
提示:使用內聯事件處理器可能比較快而且代碼較少,但是它也可以影響代碼的易讀性,可維護性和可擴展性。一個好的經驗法則就是不要在內聯事件處理器中包含 一條語句以上的 ActionScript。如果你必須包含更復雜的邏輯,就把它放到一個 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>
運行結果圖示:
通過 ActionScript 注冊一個事件監聽器
你也可以通過使用 ActionScript 注冊一個事件處理器來響應事件。 在這個例子中,使用ActionScript中的addEventHandler()? 方法注冊了一個事件監
聽器。這個addEventHandler()方法被放在了用來處理Application容器的
creationComplete事件的事件處理器中。
提示:程序開始運行的時候,在Application的外觀和它的子組件初始化完畢之后, Application的creationComplete事件就會發生。creationComplete事件的處理器提 供了一個很方便的地方來放置注冊事件監聽器的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>
運行結果圖示:
小編物語:本文援引 Dreamer's Blog ,特此感謝作者的努力。大家如果覺得這篇教程正是你所需要的話,請別忘了去作者的博客打打氣啊。