如何自定义事件

曾经在学习自定义事件时碰到不少问题,当时又没人问,周围也没什么人学,网上答案说得也不是很详细,所以有时碰壁不少,为了给初学者(比我学得晚的哈,呵呵)更容易使用自定义事件,我写了个简单的例子,希望能给迷茫中的他们带去希望。
经过我的不断调试,我自己总结出了一点东西,有些也不知道准不准确,就是说要分发事件的组件必须是继承自EventDispatch的,否则就不能分发事件,也不能监听事件。还有一点,只是我的个人猜测,哪个组件广播事件,也就只有这个组件才能侦听得到该事件。下面开始代码:
首先我们来定义事件,命为为LoginEvent.as

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 "";
}
}
}

注意此处,有些书上说一般自定义事件都要覆盖两方法clone(),toString(),但是具我测试,好像也可以不重新定义这两方法。
接下来我们来定义分发该事件的EventDispatch类,命名为LoginDispatch :

package
{
import flash.events.EventDispatcher;
import flash.events.*;
public class LoginDispatch extends EventDispatcher
{
private var eventDispatcher : EventDispatcher;
public function LoginDispatch()
{
this.addEventListener(LoginEvent.LOGIN,con);
}
//注意此处的参数event不能少
public function con(event:Event):void{
trace(event.type+"事件发生了,我要处理它了...");
}
}
}

注意了,监听器的参数是不可少的,当时我就是这个参数省写了,结果花了我大半天调试才找出来。
最好我们来写个测试MXML文件test.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:s="*" layout="absolute">
<mx:Script>
<![CDATA[
public function f():void{
//必须是侦听此事件的EventDispatch对象广播此事件
ld.dispatchEvent(new LoginEvent());
trace(ld.willTrigger(LoginEvent.LOGIN));
}
]]>
</mx:Script>
<s:LoginDispatch id="ld"/>
<mx:Button click="f()" label="btn"/>
</mx:WindowedApplication>

最后运行下看看效果吧!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值