Flex 自定义事件

一.分派自定义事件类型

 任何实现flash.event.IEventDispatcher接口的对象都可以分派事件,这包括所有显示对象和一些非显示对象类。通常,对于

自定义的非显示类,可以通过扩展flash.event.EventDispatcher实现分派事件的功能。

代码:dispatcherEvent(new Event("Complete"));

这行代码执行两个操作:

* 实例化一个新事件类来处理和保存信息

* 使用dispatcherEvent()函数调用来分派“Complete”类型的事件

二.创建自定义事件

下面将创建一个简单的实例,添加事件分派到自定义的非显示组件中。程序加载一个XML文件,然后在一个List中显示出结果。

首先创建一个名为DataLoader的新as类,这个类处理数据的加载和分析工作。

package net

{

	import event.ContentEvent;

	

	import flash.events.ErrorEvent;

	import flash.events.Event;

	import flash.events.EventDispatcher;

	import flash.events.IOErrorEvent;

	import flash.events.SecurityErrorEvent;

	import flash.net.URLLoader;

	import flash.net.URLRequest;

	

	import mx.collections.ArrayCollection;

	

	public class DataLoader extends EventDispatcher //扩展EventDispatcher类

	{

	   protected var _loader:URLLoader;	

		public function DataLoader()

		{

			super();

			_loader=new URLLoader();

			_loader.addEventListener(Event.COMPLETE,onComplete);

			_loader.addEventListener(IOErrorEvent.IO_ERROR,onError);

			_loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onError);

		}

		

		public function load(url:String):void

		{

			_loader.load(new URLRequest(url));

		}

		public function onComplete(event:Event):void

		{

			var users:ArrayCollection=new ArrayCollection();

			for each(var user:XML in XML(_loader.data).user)

			{

				users.addItem(user.@name+"-"+user.@site);

			}

			var ev:ContentEvent=new ContentEvent(ContentEvent.DATA_BACK);//创建并分派自定义完成事件

			ev.users=users;

			dispatchEvent(ev);

		}

		public function onError(event:Event):void

		{

			var ev:ContentEvent=new ContentEvent(ContentEvent.DATA_ERROR);//创建并分派自定义错误事件

			ev.error=event.text;

			dispatchEvent(ev);

		}

		

	}

}

  创建自定义事件

package event

{

	import flash.events.Event;

	

	import mx.collections.ArrayCollection;

	

	public class ContentEvent extends Event

	{

		public static const DATA_BACK:String="databack";

		public static const DATA_ERROR:String="dataError";

		

		public var users:ArrayCollection;

		public var error:String;

		

		public function ContentEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false)

		{

			super(type,bubbles,cancelable);

		}

		override public function clone():Event

		{

		    var event:ContentEvent=new ContentEvent(type,bubbles,cancelable);

			event.users=users;

			event.error=error;

			return event;

		}

	}



}

  MXML应用程序

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 

			   xmlns:s="library://ns.adobe.com/flex/spark" 

			   xmlns:mx="library://ns.adobe.com/flex/mx"

			   minWidth="955" minHeight="600"

			   creationComplete="init()">

	<fx:Script>

		<![CDATA[

			import event.ContentEvent;

			

			import flash.text.engine.ContentElement;

			

			import mx.controls.Alert;

			

			import net.DataLoader;

			protected function init():void

			{

				var dataLoader:DataLoader=new DataLoader();

				dataLoader.addEventListener(ContentEvent.DATA_BACK,onData);

				dataLoader.addEventListener(ContentEvent.DATA_ERROR,onError);

				dataLoader.load("content.xml");

			}

			protected function onData(event:ContentEvent):void

			{

				userList.dataProvider=event.users;

			}

			protected function onError(event:ContentEvent):void

			{

				Alert.show(event.error,"ERROR!");

			}

		]]>

	</fx:Script>

    <s:List id="userList" width="100" height="100"/>

</s:Application>

  

你可能感兴趣的:(Flex)