2.1.1. 問題
我想執(zhí)行一段任務(wù)以便對(duì)用戶的交互作出響應(yīng),比如當(dāng)用戶點(diǎn)擊一個(gè)按鈕時(shí)在控制臺(tái)輸出名稱列表。
2.1.2. 解決辦法
使用<mx:Button>標(biāo)簽的click 事件屬性來設(shè)定一個(gè)click 事件處理程序。也可以在ActionScript 中通過Button 實(shí)例的addEventListener 方法來添加click 事件的檢查器來達(dá)到同樣的效果。
2.1.3. 討論
如下的代碼展示了如何在MXML 中是用<mx:Button>的click 事件屬性來檢查一個(gè)按鈕行為:
+展開
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Button id="btn" label="Show Names" click="showNames(event)"/>
<mx:Script>
<![CDATA[
private function showNames(evt:MouseEvent):void
{
var temp:Array =
new Array("George","Tim","Alex","Dean");
trace(temp.toString());
}
]]>
</mx:Script>
</mx:Application>
上面的代碼創(chuàng)建了一個(gè)包含名為btn 的按鈕控件實(shí)例的應(yīng)用程序。當(dāng)這個(gè)btn 的按鈕實(shí)例被點(diǎn)擊時(shí),應(yīng)用程序會(huì)輸出一列名字到控制臺(tái)。可以看到btn 這個(gè)按鈕的click 事件屬性指向了一個(gè)方法showNames:
+展開
-XML
<mx:Button id="btn" label="Show Name click="showNames(event)"/>
每當(dāng)用戶點(diǎn)擊這個(gè)按鈕,F(xiàn)lex 框架會(huì)發(fā)布一個(gè)MouseEvent.CLICK 事件。上面這行代碼設(shè)定了在每次click 事件被發(fā)布的時(shí)候,都去調(diào)用showNames 方法,然后一個(gè)名字的數(shù)組就被創(chuàng)建以及輸出到了控制臺(tái)中。需要注意的是,MouseEvent 類型的事件實(shí)例會(huì)被自動(dòng)傳遞到處理的函數(shù)。根據(jù)發(fā)出的事件,查詢此對(duì)象可以獲得更多關(guān)于該事件本身的信息。在調(diào)試模式(Eclipse 中F11)中運(yùn)行程序,你就會(huì)看到控制臺(tái)窗口有如下輸出。
George,Tim,Alex,Dean
事件檢查器也能通過ActionScript 來設(shè)定。下面的例子就是使用ActionScript 設(shè)定了showNames 和showTitles 兩個(gè)檢查器到btn 這個(gè)按鈕實(shí)例。
+展開
-XML
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
creationComplete="initApp(event);">
<mx:Button id="btn" label="Show Names"/>
<mx:Script>
<![CDATA[
import mx.events.FlexEvent;
private function initApp(evt:FlexEvent):void
{
btn.addEventListener(MouseEvent.CLICK,showNames);
btn.addEventListener(MouseEvent.CLICK,showTitles);
}
private function showNames(evt:MouseEvent):void
{
var temp:Array =
new Array("George","Tim","Alex","Dean");
trace(temp.toString());
}
private function showTitles(evt:MouseEvent):void
{
var temp:Array = new Array("Director","Vice-
President","President","CEO");
trace(temp.toString());
}
]]>
</mx:Script>
</mx:Application>
注意,<mx:Application>的creationComplete 事件用來設(shè)定了按鈕點(diǎn)擊事件的2 個(gè)檢查器,showNames 和showTitles.
+展開
-ActionScript
private function initApp(evt:FlexEvent):void
{
btn.addEventListener(MouseEvent.CLICK,showNames);
btn.addEventListener(MouseEvent.CLICK,showTitles);
}
Running this application in debug mode generates the following output in the Console window:
在調(diào)試模式中運(yùn)行這個(gè)程序,控制臺(tái)窗口會(huì)輸出如下內(nèi)容:
George,Tim,Alex,Dean
Director,Vice-President,President,CEO
檢查器根據(jù)被注冊(cè)時(shí)的順序進(jìn)行調(diào)用。因?yàn)閟howNames 比較showTitles 早注冊(cè)檢查,所以名字列表比標(biāo)題列表先生成輸出。如果要改變他們(檢查器)的執(zhí)行順序,可以修改他們對(duì)按鈕注冊(cè)事件檢查的順序。甚至,你可以在注冊(cè)檢查器時(shí)設(shè)定它們的優(yōu)先級(jí),例如下面的代碼:
+展開
-ActionScript
private function initApp(evt:FlexEvent):void
{
btn.addEventListener(MouseEvent.CLICK,showNames);
btn.addEventListener(MouseEvent.CLICK,showTitles);
}
使用修改后的代碼,再次在調(diào)試模式中運(yùn)行程序,我們可以看到:
Director,Vice-President,President,CEO
George,Tim,Alex,Dean
使用大的優(yōu)先級(jí)值(priority)注冊(cè)的檢查器會(huì)比使用小優(yōu)先級(jí)的優(yōu)先級(jí)注冊(cè)的檢查器更早的運(yùn)行。如果有超過一個(gè)檢查器適用了相同的優(yōu)先級(jí)值,則執(zhí)行順序還是依照檢查器注冊(cè)的順序。