我们自定义事件的执行的过程:
1.我们对于控件的操作产生了事件
2.事件被派发出去
3.事件产生的影响又在界面上体现了出来
自定义事件类 MyEvent :
package utils
{
import flash.events.Event;
public class MyEvent extends Event
{
public static const EVENT_TEST:String = "EventTest";
public static const ROLL_OVER:String = "RollOver";
public function MyEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
}
}
自定义控件 MyButton:
<?xml version="1.0" encoding="utf-8"?>
<mx:Button xmlns:mx="http://www.adobe.com/2006/mxml"
click="dispatchEvent(new MyEvent(MyEvent.EVENT_TEST))"
rollOver="dispatchEvent(new MyEvent(MyEvent.ROLL_OVER))"
>
<!-- 当button被点击的时候就会派发一个新的事件,就是一个类型为MyEVENT.Event_TEST的事件 -->
<!-- 注意这个地方的Event的名称要和上面派发的事件的名称要完全一致就是:
我们所派发的事件,只有在我们的控件里面被定义了,并且在调用的时候被定义了,
那么在事件被触发的时候它才会产生效果。
-->
<mx:Metadata>
[Event(name="EventTest",type="utils.MyEvent")]
[Event(name="RollOver",type="utils.MyEvent")]
</mx:Metadata>
</mx:Button>
测试页面 testMyButton:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
xmlns:my="utils.*"
>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import utils.MyEvent;
private function handleEvent(e:MyEvent):void {
trace(e);
}
private function roolOverHandler(e:MyEvent):void {
Alert.show("rollOVer事件被触发了");
trace(e);
}
]]>
</mx:Script>
<!-- 触发事件所执行的方法是我们自己随便定义的,关键是事件要可以被触发,
事件被触发的关键就在于MyButton位置的定义,对不同的操作派发不同的事件
这样我们这边才会做出响应。
-->
<my:MyButton id="my1" label="ChangeTextArea" EventTest="myTa.text='got event'" x="208" y="213"/>
<my:MyButton id="my2" label="Trace" EventTest="handleEvent(event)" x="209" y="258"/>
<my:MyButton id="my3" label="roolOver" RollOver="roolOverHandler(event)"/>
<mx:TextArea id="myTa" x="141" y="55"/>
</mx:Application>