package
{
import flash.events.Event;
public class LoginEvent extends Event
{
public static const LOGIN:String = "login";
public function LoginEvent()
{
super(LOGIN);
}
override public function clone():Event{
return new LoginEvent();
}
override public function toString():String{
return "";
}
}
}
2.
package
{
import flash.events.Event;
import flash.events.EventDispatcher;
public class LoginDispatch extends EventDispatcher
{
public function LoginDispatch()
{
this.addEventListener(LoginEvent.LOGIN,con);
}
public function con(event:Event):void{
trace(event.type+"...");
}
}
}
3.
package
{
import flash.display.Sprite;
public class Test extends Sprite
{
public function Test()
{
var ld:LoginDispatch = new LoginDispatch();
ld.dispatchEvent(new LoginEvent());
trace(ld.willTrigger(LoginEvent.LOGIN));
}
}
}
4.
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。可以为特定类型的事件、阶段和优先级在显示列表的所有节点上注册事件侦听器。
成功注册一个事件侦听器后,无法通过额外调用 addEventListener()
来更改其优先级。要更改侦听器的优先级,必须首先调用 removeListener()
。然后,可以使用新的优先级再次注册该侦听器。
请记住,注册该侦听器后,如果继续调用具有不同 type
或 useCapture
值的 addEventListener()
,则会创建单独的侦听器注册。例如,如果首先注册 useCapture
设置为 true
的侦听器,则该侦听器只在捕获阶段进行侦听。如果使用同一个侦听器对象再次调用 addEventListener()
,并将 useCapture
设置为 false
,那么便会拥有两个单独的侦听器:一个在捕获阶段进行侦听,另一个在目标和冒泡阶段进行侦听。
不能只为目标阶段或冒泡阶段注册事件侦听器。这些阶段在注册期间是成对出现的,因为冒泡阶段只适用于目标节点的始祖。
如果不再需要某个事件侦听器,可调用 removeEventListener()
删除它,否则会产生内存问题。由于垃圾回收器不会删除仍包含引用的对象,因此不会从内存中自动删除使用已注册事件侦听器的对象。
复制 EventDispatcher 实例时并不复制其中附加的事件侦听器。(如果新近创建的节点需要一个事件侦听器,必须在创建该节点后附加该侦听器。) 但是,如果移动 EventDispatcher 实例,则其中附加的事件侦听器也会随之移动。
如果在正在处理事件的节点上注册事件侦听器,则不会在当前阶段触发事件侦听器,但会在事件流的稍后阶段触发,如冒泡阶段。
如果从正在处理事件的节点中删除事件侦听器,则该事件侦听器仍由当前操作触发。删除事件侦听器后,决不会再次调用该事件侦听器(除非再次注册以备将来处理)。