为什么要设计这样的处理机制呢?
由于OOP编程将程序看成一个个对象、模块共同交流协作而提供功能或服务,这样必然会涉及对象之间交流消息的情况。所谓消息,就是指系统某处发生了什么事情,以信息的方式通知相关的对象。
AS3中采用的DOM3事件处理机制可以让交流数据的双方降低耦合度,及所谓的“脱耦”(脱离耦合性)!使得各个对象之间依赖性大大降低。
DOM3事件模型定义了一整套标准的生成和处理事件消息的方法,使程序中的对象可以相互交互、通信,保持自身状态和响应变化。
简单的说,数据的提供者只管发出数据对象,只要确保数据对象是flash.events.Event类或者子类的实例即可。
这种数据对象称为:事件(Event)。
数据对象的发出者称为:事件发送者(Event dispatcher)。
接受事件的对象称为:事件监听者(Event listener)。
DOM3事件的优点是:事件发送者和事件接收者的依赖性大大降低。
事件发送者只需要发送事件对象,
事件监听者只需要接受事件对象。
---------------------------------------------------------------------------------
下面用一个点菜的例子来深刻理解事件(Event)的原理!
当我们作为客人走进一家饭店时,就等于告诉服务生,我们要点菜,你来服务。当点菜时,我们只要报上需要的菜名,服务生自然会记录下我们点的菜单,并吩咐厨房。这个事件里就包含着DOM3的事件流程。
首先确定几个类,即:
客人类(Customer
),事件发送者(Event dispatcher)。
服务生类(Waiter
),事件监听者(Event listener)即事件侦听器。
点菜事件类(OrderEvent
),事件(Event)。
这些类都属于一个文档类SampleOrderDishes。
首先设计OrderEvent 事件类,这个事件应该包含事件的类型“点菜”,以及所点的菜名。
package
{
import flash.events.Event;
public class OrderEvent
extends Event
{
public static const ORDER_DISHES: String = "点菜";
private var _dishes:Array;
private var _name:String;
public function OrderEvent()
{
super(ORDER_DISHES);
}
public function set nameCustomer(name:String):void
{
_name = name;
}
public function get nameCustomer():String
{
return _name;
}
public function set dishes(dishesAry:Array):void
{
_dishes = dishesAry;
}
public function get dishes():Array
{
return _dishes;
}
override public function toString():String
{
return formatToString("OrderEvent","type","bubbles","cancelable","eventPhase","dishes","name");
}
override public function clone():Event
{
var tmpEvt:OrderEvent = new OrderEvent();
tmpEvt._dishes = _dishes;
return tmpEvt;
}
}
}
接下来是客人类Customer,客人类中需要发出点菜OrderEvent事件。
package
{
import flash.events.EventDispatcher;
public class Customer
extends EventDispatcher
{
private var name:String;
public function Customer(ns:String)
{
name = ns;
}
public function order():void
{
var orderDish:OrderEvent = new OrderEvent();
orderDish.dishes = ["宫保鸡丁","鱼香肉丝","咖喱牛肉"];
orderDish.nameCustomer = name;
dispatchEvent(orderDish);
//发出点菜事件
}
}
}
服务生类Waiter类中需要有接受 OrderEvent 事件的公开方法,用来做 OrderEvent 事件的监听器。
package
{
public class Waiter
{
public function replayOrderFood(evt:OrderEvent):void
{
trace("你好,"+ evt.nameCustomer+"!你点的菜是:\r"+evt.dishes);
trace("我马上吩咐厨房去做。");
}
}
}
最终文档类SampleOrderDishes类
package {
import flash.display.Sprite;
public class SampleOrderDishes
extends Sprite
{
public function SampleOrderDishes()
{
var luming:Customer = new Customer("Luming");
var serviceWaiter:Waiter = new Waiter();
luming.addEventListener(OrderEvent.ORDER_DISHES, serviceWaiter.replayOrderFood);
luming.order();
//luming这个人用order()方法点菜,在Order()方法中发出了OrderEvent事件,如Customer中所示
/*之后,被服务生serviceWaiter的replayOrderFood方法侦听到了,输出了
你好,luming!你点的菜是
宫保鸡丁,鱼香肉丝,咖喱牛肉
我马上吩咐厨房去做
*/
}
}
}
书中看到的例子觉得写的不错。拿来修改一下,并加入自己的分析。
如果想清楚整个流程建议debug走几遍,会对事件理解的更深刻。
分享到:
相关推荐
### Flex事件机制详解 #### 一、事件简介 在Flex框架中,事件是应用程序与用户交互的核心机制之一。它可以由多种触发源启动,包括但不限于用户的输入(如键盘按键、鼠标点击)、外部数据加载完成(例如WebService...
Flex事件处理依赖于ActionScript 3.0的事件机制,但在Flex层面提供了更直观的接口来处理这些事件。 事件流是ActionScript 3.0引入的一个重要概念,它与显示列表紧密相关。事件流描述了事件对象如何在显示列表中的...
自定义事件是扩展Flex事件处理能力的重要手段。当你需要处理非标准行为或者组件间的复杂交互时,可以创建自定义事件。创建自定义事件需要继承Event类或者与其相关的子类,例如MouseEvent或KeyboardEvent。在自定义...
Flex ActionScript3.0事件机制的Demo, 举例说明了事件的三个阶段,事件的派发,事件的侦听,事件的拦截,自定义事件等相关知识点. 以上知识点在Demo中都有体现,初学者请仔细分析代码,加强理解,多调试、修改、验证以加深...
Flex事件机制是Adobe Flex应用程序中处理用户交互和组件通信的核心组成部分。它主要涉及事件流、事件处理程序以及事件对象的概念,这些在构建富互联网应用程序(RIA)时扮演着至关重要的角色。下面将对这些概念进行...
在 Flex 中,事件监听通常通过在 MXML 组件上添加事件处理函数来完成。例如,我们可以为 `Button` 组件的 `click` 事件添加一个处理函数,如 `clickHandler`,并在函数签名中传递 `event` 参数。这个 `event` 参数...
通过上述内容,我们了解了Flex事件机制的基本概念及其重要组成部分,包括事件的触发与处理、事件注册通道的作用、事件分发的过程以及事件对象的属性。对于Flex开发者而言,熟练掌握这些知识可以帮助他们更加高效地...
Flex事件机制是Adobe Flex框架中一个关键的概念,它允许组件之间通过事件进行通信。在Flex中,事件机制的分发主要包括三个主要阶段:捕获阶段、目标阶段和冒泡阶段。下面将详细介绍这些阶段以及自定义事件的创建与...
下面,我将详细介绍Flex布局的基础知识以及可能与之相关的JavaScript事件处理。 1. **Flex布局基础**: - **Flex容器**:设置`display: flex`或`display: inline-flex`的元素成为Flex容器,其内部的子元素称为Flex...
-- 组件和事件处理代码 --> ``` 在这个例子中,MXML文档结构决定了组件的实例化顺序和事件触发的时间点,开发者可以通过添加事件监听器来观察和响应这些事件。 总之,理解Flex事件运行流程,特别是`...
郑老师关于flex3事件机制的讲座,讲的很好哦!
关于flex事件的讲解 一. 引 很多新人对Flex的事件机制都不太熟悉,在使用过程中难免会出现各种问题,这是一个非常普遍的问题,为了更快更好的帮助大家,将介绍一下Flex中事件的各种机制和用法。 Flex的精髓之一...
4. **事件处理** itemRenderer还可以监听并处理鼠标点击、键盘交互等事件。在itemRenderer内部添加事件监听器,可以实现对特定项的响应。 5. **重用和优化** Flex为了提高性能,会对itemRenderer进行复用。因此,...
Flex的核心优势在于其强大的用户界面组件库以及高效的事件处理机制。本文将详细探讨Flex中的事件机制,特别是`target`与`currentTarget`的区别,以及`useCapture`的作用。 #### 二、事件机制基础 在Flex中,事件是...
Flex 事件流是Flex应用程序中事件处理的核心机制,它使得组件之间能够有效地通信和响应用户交互。在深入探讨之前,我们需要理解几个基本概念。 1. **事件机制**:事件是Flex中的一种通信方式,当特定条件满足时,...
通过以上分析,我们可以看到Flex的事件处理机制不仅强大且灵活,而且遵循标准,易于学习和使用。无论是在构建复杂的用户界面还是实现复杂的业务逻辑方面,事件都起着至关重要的作用。掌握Flex的事件机制,有助于...
Flex事件代码生成器是一款专为Flex开发者设计的实用工具,旨在简化代码编写过程,提高开发效率。Flex是一种基于ActionScript 3.0的开源框架,主要用于构建富互联网应用程序(RIA)。在Flex应用开发中,处理各种用户...
它允许开发者通过简单的拖放操作设计界面,同时支持高级事件处理机制,让开发者可以专注于业务逻辑,而非繁琐的界面细节。 #### 二、Flex事件解析:深入理解交互逻辑 Flex的核心之一在于其强大的事件处理机制。...
Flex事件机制是Adobe Flex框架中的核心组成部分,它允许开发者创建响应用户交互的动态应用程序。在Flex中,事件处理是通过事件监听器来实现的,这些监听器可以注册到UI组件或者应用程序本身,以便在特定事件发生时...
在本文中,我们将深入探讨基于Java的Flex事件监听机制,这是一种强大的工具,允许开发者响应用户交互和应用程序状态的变化。Flex事件模型是ActionScript 3.0的核心组成部分,它与Java的事件处理方式有所不同,但可以...