extend flash.events.Event

当你自定义并继承Event类时,有一个重要的方法必须覆盖。这个方法就是Event.clone():Event

Flash CS3中的中文帮助写得很简单,并没有说明什么原因。

原因是dispatchEvent(e:Event)方法,如果e不是通过:

var e:CustomEvent = new CustomEvent('custom');
//广播e事件
dispatchEvent(e);//e不会调用e.clone();方法

  而是通过以下方式获得的:

addEventListener('custom', customFunc);
//此方法来自监听CustomEvent的'custom'事件
function customFunc(e:CustomEvent):void{
   //再广播此事件
   dispatchEvent(e);//这时e会调用e.clone();方法
}

 如果不重新定义e.clone()方法,则执行dispatchEvent(e)时,会自动调用CustomEvent父类(Event)的clone()方法,则clone出来的事件是Event而不是自定义的CustomEvent,对于CustomEvent里添加的属性或方法就不会存在,因为广播出去的事件为Event类而不是CustomEvent类。

 以此类是我自定义的一个Webservice类的事件类。

package com.wlash.data {

	import flash.events.Event;
	
	
	/**
	 * WebservicesEvent.
	 * annotate here for this class.
	 * 
	 */
	public class WebServicesEvent extends Event {
		
		/** those value are 'URL.Not.Found', 'Call.Error', 'Security.Error', 'Call.Security.Error' */
		public var code:String;
		/** detail infomation */
		public var info:String;
		/** call remote method name */
		public var method:String;
		
		//*************************[READ|WRITE]*************************************//
		
		
		//*************************[READ ONLY]**************************************//
		
		
		//*************************[STATIC]*****************************************//
		/**
		* define ioerror event, when call remote method error or can't find the webservices url.
		* code is 'URL.Not.Found' or 'Call.Error'.
		* @eventType callSecurityError
		*/
		static public const IO_ERROR:String				=	'ioerror';
		/**
		* define securityError event, when call remote method security error.
		* code is 'Security.Error' or 'Call.Security.Error'.
		* @eventType securityError
		*/
		static public const SECURITY_ERROR:String		=	'securityError';
		
	
		/**
		 * CONSTRUCTION FUNCTION.
		 * Create this class BY [new WebservicesEvent();]
		 * @param	type like IO_ERROR, SECURITY_ERROR ...
		 * @param	code value are  Call.Error or Security.Error or URL.Not.Found or Call.Security.Error.
		 * @param	info the detail infomation
		 * @param	method method name if not null
		 */
		public function WebServicesEvent(type:String, code:String='',info:String='',method:String=null) {
			//参照Adobe Event的子类,构造函数至少有三个参数,(type, bubbles, cancelable)三个参数,虽然对于部分Event的子类后两个参数是无用的,但也定义。如果再有额外的参数,则是在cancelable后边继续定义。
			//我在这里是贪图方便并没有按照Adobe的方法来定义Event的子类
			super(type, false, false);
			this.info	=	info;
			this.code	=	code;
			this.method	=	method;
		}
		//*************************[PUBLIC METHOD]**********************************//
		/**
		 * format output data
		 * @return [Event=WebServicesEvent, type, code, info, method, data]
		 */
		override public function toString():String {
			//如果重新定义此类,可以通过trace(e)得到自定义的格式,不是必要的。
			return formatToString('WebServicesEvent:', 'type', 'code', 'info', 'method');
		}
		
		/**
		 * @inheritDoc 
		 */
		override public function clone():Event {
			//必须覆盖此方法,且返回值只能为Event,而不是自定义的WebServicesEvent.
			//当要监听函数中接收到此事件后,可以使用WebServicesEvent(e)或e as WebServicesEvent方式转为WebServicesEvent类。
			return new WebServicesEvent(type, code, info, method);
		}
		//*************************[INTERNAL METHOD]********************************//
		
		
		//*************************[PROTECTED METHOD]*******************************//
		
		
		//*************************[PRIVATE METHOD]*********************************//
		
		
		
		

		
		//*************************[STATIC METHOD]**********************************//
		
		
	}
}

 

 


已发布

分类

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注