1.     定义对象事件
你在一个监听器函数片段中指定对象为Event类型,如下所示:
 
function myEventListener(e:Event):void { ... }
 
不过,如果你像访问比被调度的事件类型更加独特的属性,你就必须指定更加具体的事件。如下所示:
 
import mx.events.ToolTip
function myEventListener(e:ToolTipEvent):void { ... }
 
在一些情况下,你必须在你的ActionScript块中引入事件类。
 
大多数对象都有关联到其上的特殊事件,并且大多数对象都可以调度一个以上类型的事件。
 
如果你定义了一个Event类型的事件,你可以将它转换为跟家太特殊的类型来访问它的类型特有的属性。
 
2.     访问当前目标的属性
事件对象包含一个到调度组件(或目标)的引用,这意味着你可以访问那个目标组件的所有属性和方法。下面的例子访问了触发事件的Button控件的id属性;
 
<?xml version="1.0"?>
<!-- events/AccessingCurrentTarget.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
import mx.controls.Alert;
private function myEventHandler(e:Event):void {
Alert.show("The button '" + e.currentTarget.id + "' was clicked.");
}
]]></mx:Script>
<mx:Button id="b1" label="Click Me" click="myEventHandler(event)"/>
</mx:Application>
 
你可以访问当前目标的成员。如果你没有将当前目标转换为一个具体的类型,那么编译器将认为目标的类型为ObjectObject可以拥有任意的属性或方法,因为在ActionScriptObject类型是动态的。所以,当访问当前目标的方法和属性的时候,最佳实践是总是对目标进行类型转换。这样做将赋予你强壮的编译时类型检查,避免抛出危险的运行时异常。
 
下面的例子在调用setSelection()方法前将当前目标转换为TextInput类,但是在尝试设定tmesis属性前没有尝试进行转换。Tmesis属性在TextInput类中并不存在。这就意味着当你尝试访问并不存在的成员的时候,你将获得一个运行时错误,而不是一个编译时错误。
 
<?xml version="1.0"?>
<!-- events/InvokingOnCurrentTarget.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
import mx.core.UIComponent;
private function tiHandler(e:Event):void {
/* The following enforces type checking: */
TextInput(e.currentTarget).setSelection(0,3);
/* The following throws a run-time error but not a compile-time error:
e.currentTarget.tmesis = 4;
*/
/*
... unless you cast it to the expected type like the following. Then
the compiler throws an error.
TextInput(e.currentTarget).tmesis = 4;
*/
}
]]></mx:Script>
<mx:TextInput id="ti1" click="tiHandler(event)"
text="This is some text. When you click on this control, the first three characters
are selected."/>
</mx:Application>
 
你还可以将当前目标转换为UIComponent或其他更加一般化的类。这样,即使你不知道到底是哪个具体的控件调度了方法,但至少你获得了一定程度的类型检查。
 
你还可以访问target属性的属性和方法。target属性包含了显示列表中的当前节点。