论坛首页 编程语言技术论坛

如何自定义事件

浏览 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>

最后运行下看看效果吧!
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics