Adobe Flex 三種方式處理事件

Adobe® Flex™應用程序是事件驅動的。當用戶與界面組件交互時事件會通知程序員,當一個組件的外觀或者生命週期發生重要改變,比如創建或者銷燬一個容器,或改變一個容器的大小的時候,事件也會通知程序員。

當一個組件的實例分派一個事件時,你爲那個事件註冊的監聽器對象就會被通知。你可以在ActionScript中定義事件監聽器(或者叫做事件處理器)來處理事件。你既可以在MXML聲明中爲一個組件註冊事件監聽器,也可以在ActionScript中實現相同的功能。

接收事件通知有三種方式:

• 在MXML中註冊一個事件處理器

• 在MXML中創建一個內聯(inline)的事件處理器

• 通過ActionScript註冊一個事件處理器

(1)在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>

(2)在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>

(3)通過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
{
// Listen for the click event on the Button control
myButton.addEventListener (MouseEvent.CLICK, clickHandler);
}
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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章