一.分派自定义事件类型

任何实现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 自定义事件的更多相关文章

  1. FLEX自定义事件

    有时候我们需要让两个组件之间实现联动,并且在其中传递数据,自定义事件机制可以帮助我们比较优雅的实现这种需要. 下面的例子,是打算实现一个列表和一个编辑框的联动. 编辑框代码 <?xml vers ...

  2. Flex事件机制学习-自定义事件实现类间通信 .

    今天,学习Flex自定义事件,可以使两个类通信,定义一个Main类. public class Main extends Sprite     {            public function ...

  3. 【教程】【FLEX】#003 自定义事件、模块间通讯

    本篇笔记,主要阐明 事件是如何创建 和 如何使用自定义事件达到模块之间通讯 的效果. 句子解释: 什么叫做模块之间的通讯呢?? 简单点说,就是两个模块之间可以互相传数据. A模块 可以接收到 B模块的 ...

  4. Flex之自定义事件

    1.通过dispatchEvent委托事件模式完成自定义事件: <?xml version="1.0" encoding="utf-8"?> < ...

  5. flex中dispatchEvent的用法(自定义事件) .

    Evevt和EventDispatcher类在as3的事件机制中是很重要的角色,dispatchEvent()是EventDispatcher类的一个事件发送方法,它可以发送出Event类或其子类的实 ...

  6. [置顶] flex4事件监听与自定义事件分发(三)

    1.我们来说一下自定义事件子类.什么时候创建新的事件类以及怎么创建. (1)说一下,我们什么时候需要自定义事件类.举例说明,在flex中事件的基类是Event,而当我们点击某个按钮或者是单击某个组件的 ...

  7. Flex自定义组件开发之日周月日期选择日历控件

    原文:Flex自定义组件开发之日周月日期选择日历控件         使用过DateField的我们都知道,DateField 控件是用于显示日期的文本字段,字段右侧带有日历图标.当用户在控件边框内的 ...

  8. ExtJS自定义事件

    1.开发ExtJS组件UI的时候,基本上对于一些操作,就是与后台交互之类的多数都是用户进行点击触发一个事件,在事件的处理器handler里面调具体的业务方法,完成业务数据的处理以及业务流程的流转机制, ...

  9. flex 自定义组件的编写

    使用flex也很久了,也改过别人写的flex自定义组件,但是就是没有系统的研究下flex组件的编写步骤,和要注意的东西,在这里我参照一本书中的例子,好好的理解下,也为了巩固下自己对flex的理解! 1 ...

随机推荐

  1. C++输出中文字符(转)

    C++输出中文字符 1. cout 场景1: 在源文件中定义 const char* str = "中文" 在 VC++ 编译器上,由于Windows环境用 GBK编码,所以字符串 ...

  2. 在VC中,为图片按钮添加一些功能提示(转)

    在VC中,也常常为一些图片按钮添加一些功能提示.下面讲解实现过程:该功能的实现主要是用CToolTipCtrl类.该类在VC  msdn中有详细说明.首先在对话框的头文件中加入初始化语句:public ...

  3. JavaSE复习日记 : 实例化对象/构造方法和this关键字

    /* * 实例化对象/对象的构造方法/this关键字 */ /* * 实例化对象 * * 就是实例化某一个类; * 从不同角度去理解的话就是: * 1. 从人的认知角度: * 就是具体化某个东西; * ...

  4. Android常用工具类封装---SharedPreferencesUtil

    SharedPreferences常用于保存一些简单的数据,如记录用户操作的配置等,使用简单. public class SharedPreferencesUtil {              // ...

  5. Analysis about different methods for reading and writing file in Java language

    referee:Java Programming Tutorial Advanced Input & Output (I/O) JDK 1.4+ introduced the so-calle ...

  6. IOS 特定于设备的开发:获取和使用设备姿势(通过手机方向控制3d物体显示)

    利用设备的机载陀螺仪可以实现,当你旋转手机屏幕时,里面的画面不会随着视图更新而移动,以平衡物理运动. 下面例子利用少量简单的几何变换执行该操作.他建立一个运动管理器,订阅设备运动更新,然后基于运动管理 ...

  7. 一起来看看css中的单位

    一起来看看css中的单位 由于一直以来对于css中的百分比单位究竟是相对于谁的比例,这个问题不是很了解,所以就专门找资料看了一下. <div class="container w500 ...

  8. 安装CAD出现Error 1904.Module的解决方法

    在安装AutoCAD2008时,安装过程中出现了一个小错误,虽然说不影响使用,也不影响功能,但还是需要把这个问题解决,今天就和大家分享解决这个问题的方法. 错误描述 会在安装过程中出现错误提示:Err ...

  9. 射频识别技术漫谈(28)——基于MF1射频卡的酒店门锁设计

    电子门锁是现代星级酒店管理电子化.智能化的重要电子设备.相较于传统的机械锁,基于RFID技术的电子门锁使用方便,易于管理,安全性高,可实现对开锁用户的分优先级自动管理,对房间入住信息实现自动统计与报表 ...

  10. 三种客户端访问wcf服务端的方法 C#

    原文 http://blog.csdn.net/zlj002/article/details/7914556 string jsonstr = String.Empty; string url = & ...