• 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>
    

      

  • 相关阅读:
    软件工程概论
    软件工程概论
    JAVA
    JAVA
    C#字符补位
    C#绘图双缓冲
    C#中IP地址转换为数值的方法
    C#并行编程-并发集合
    C#委托
    C#事件(event)解析
  • 原文地址:https://www.cnblogs.com/sunrunzhi/p/3371759.html
Copyright © 2020-2023  润新知