Flex4 创建自定义Event

 

以加载一个XML文档为例

 

首先创建一个名为DataLoader的ActionScript Class,用来处理数据加载和分析工作。

 

package net
{
	//events.ContentEvent为自定义的Event类
	import events.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;
	//添加元数据方便MXML代码提醒
	[Event(name="dataBack", type="events.ContentEvent")]
	[Event(name="dataError", type="events.ContentEvent")]
	public class DataLoader extends 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));
		}
		
		protected 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);
		}
		protected function onError(event:ErrorEvent):void
		{
			var ev:ContentEvent = new ContentEvent(ContentEvent.DATA_ERROR);
			ev.error =event.text;
			dispatchEvent(ev);
		}
	}
}

 然后创建一个事件处理的自定义ContentEvent

 

 

package events
{
	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);
		}
		//重写Clone 自定义Event必须重写Clone方法
		override public function clone():Event
		{
			var event:ContentEvent = new ContentEvent(type,bubbles,cancelable);
			event.users = users;
			event.error = error;
			return event;
		}
	}
}

 以上,DataLoader对于数据处理的逻辑就完成了,现在要创建一个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"
			    applicationComplete="init()" xmlns:net="net.*">

	<fx:Script>
		<![CDATA[
			import events.ContentEvent;
			
			import mx.collections.ArrayCollection;
			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("data/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:Panel verticalCenter="0" horizontalCenter="0" title="Mix" width="450" height="300">
		<s:List id="userList" width="100%" height="100%"/>
	</s:Panel>
</s:Application>

 

 

关于传入的XML,在于data/content.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<users>
    <user name="" site=""/>
</users>

 的形式。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值