浏览 1869 次
锁定老帖子 主题:如何自定义事件
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-08
经过我的不断调试,我自己总结出了一点东西,有些也不知道准不准确,就是说要分发事件的组件必须是继承自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> 最后运行下看看效果吧! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |