关于Flex事件机制的理解

优点:减少同一个UI树上对象监听器数量,从而带来性能优化。

1.FLEX 事件机制是分为三个阶段

捕获---〉目标----〉冒泡

所谓捕获:即是寻找目标的过程,是目标的父节点。注:起点是Stage,终点也是Stage。

所谓目标:即是找到目标。

所谓冒泡:可以理解为捕获的返过程。

此为官方图解。

事件的派发:

Flex中可以通过dispatchEvent()方法手工派发事件,
所有UIComponent的子类都可以调用此方法. 
  语法: 
 
objectInstance.dispatchEvent(new Event("event_type"):Boolean 
 
参数event_type是Event对象的type属性. 除非对事件调用 preventDefault()(在这种情况下,它返回 false),否则值为 true
 
可以使用此方法派发任意事件, 而不仅仅是用户自定义事件, 比如: 可以派发一个Button的Click事件. 
  var
result:Boolean = buttonInstance.dispatchEvent(new Event(MouseEvent.CLICK));

在Flex应用中不是必须对新派发的事件进行处理, 如果触发了一个事件,
而没有对应的Listener时,Flex忽略此事件.

  如果想给Event对象添加新属性, 就必须继承Event类,然后定义新属性。

2.target和currentTarget究竟谁是事件的派发者?

 
 targe:简单说就是指向的目标对象。并非事件的派发者。在一个事件整个生命周期中所有被派发的事件处理函数内部的target对象是一样的,每个被监听者派发的事件处理函数
     中的target一定都是同一个对象。

currentTarget:事件的派发者。调用注册在事件上的回调函数的那个对象,简单的说就是派发事件的对象。

3.如何进行代码编写。

首先看看AS3中为IEventDispatcher类型对象注册事件监听的接口

addEventListener(type:String, listener:Function,
useCapture:Boolean =
false, priority:int = 0, useWeakReference:Boolean =
false):void{}

如果只是简单的这样写:

panel.addEventListener(MouseEvent.CLICK,
onMouseClickHandler);

那么该事件的生命周期将是:整个生命周期。即捕获-〉目标->冒泡,所有目标父节点上注册的事件都会被执行两次(捕获阶段一次+冒泡阶段一次)!这样如果有大量的事件监听将会很消耗资源。所以我们要对该方法中的参数进行设置。

首先了解该方法中各个参数的意义。

type:事件的类型。

listener:响应该事件时处理函数。

useCapture:是否进行触发,或者说是派发,默认为false。

如果将 useCapture 设置为
true,则侦听器只在捕获阶段处理事件,而不在目标或冒泡阶段处理事件。如果 useCapture
false,则侦听器只在目标或冒泡阶段处理事件。若要      在所有三个阶段都侦听事件,请调用两次
addEventListener(),一次将 useCapture 设置为
true,第二次再将 useCapture 设置为
false

priority:默认为0,事件侦听器的优先级。优先级由一个 32 位整数指定。数字越大,优先级越高。优先级为
n 的所有侦听器会在优先级为 n-1 的侦听器之前处理。如果两个或更  
多个侦听器共享相同的优先级,则按照它们的添加顺序进行处理。默认优先级为 0。

useWeakReference:确定对侦听器的引用是强引用,还是弱引用。强引用(默认值)可防止您的侦听器被当作垃圾回收。弱引用则没有此作用。

注意:成功注册一个事件侦听器后,无法通过额外调用
addEventListener() 来更改其优先级。若要更改侦听器的优先级,必须先调用
 EventDispatcher.removeEventListener()。  
否则会产生内存问题。由于垃圾回收器不会删除仍包含引用的对象,因此不会从内存中自动删除使用已注册事件侦听器的对象。然后,可以使用新  
的优先级再次注册该侦听器。

如果在正在处理事件的节点上注册事件侦听器,则不会在当前阶段触发事件侦听器,但会在事件流的稍后阶段触发,如冒泡阶段。

如果从正在处理事件的节点中删除事件侦听器,则该事件侦听器仍由当前操作触发。删除事件侦听器后,决不会再次调用该事件侦听器(除非再次注册以备将来处理)。

关于Flex事件机制的理解,布布扣,bubuko.com

时间: 2024-08-24 08:46:54

关于Flex事件机制的理解的相关文章

关于事件机制的理解

最近终于把事件机制弄明白了.和大家分享一下. 下面是定义的事件: package { import flash.events.Event; public class NBEEvent extends Event { /** * 对 */ public static const RIGHT: String = "nbe_event_right"; public function NBEEvent(type: String, bubbles: Boolean = true, cancela

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

今天,学习Flex自定义事件,可以使两个类通信,定义一个Main类. public class Main extends Sprite     {            public function Main()            { //演示ChildSprite类是与Main类通信,ChildSprite类稍后说明: var child:ChildSprite=new ChildSprite(); //指示该实例的属性值            child.flag="01";

C#中事件机制的理解

引自:http://www.csharpwin.com/csharpspace/2793.shtml 前些天狠狠心咬咬牙,从刚发的工资中拿出几十块大洋,又给老外投资了一笔,呵呵,还好投资方向没错,物超所值啊拥有了一本Jeffrey Richter前辈的<Microsoft .net框架程序设计>,现在已经看完前17章了,可谓是进展神速啊(小小滴自夸一下) 昨天和今天两天好好的把"委托"机制研究了一下,算是小有所明白了,想起来前些天看"事件"的时候,因为其

在Unity3D中基于订阅者模式实现事件机制

??各位朋友,大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是http://qinyuanpei.com.今天博主想和大家分享的是在Unity3D中基于订阅者模式实现消息传递机制,我们知道Unity3D中默认提供了一种消息传递机制SendMessage,虽然SendMessage使用起来的确非常简单,可是它的这种简单是建立在付出一定的代价的基础上的.经常有朋友提及不同的模块间如何进行通信的问题,可能答案最终会落到单例模式.委托和事件机制这些关键词上,在这种情况下本文所探讨的内容可能会帮助

Flex中利用事件机制进行主程序与子窗体间参数传递

在开发具有子窗体,或者itemrenderer的应用时,常常涉及到子窗体向父窗体传递参数或者从itemrenderer内的控件向外部的主程序传递参数的需求.这些都可以通过事件机制这一统一方法加以解决.在我的应用中有两个需求: 1.左侧的List控件的itemrenderer中包含CheckBox控件,当其状态改变时需要同时改变主程序中的一个数组变量的内容:2.左下方的"新增届次"按钮会弹出一个窗口,窗口中输入届次信息后需要修改数据库中的表,同时表的更改结果要能够在List控件中体现出来

事件和消息机制的理解

消息/事件机制是几乎所有开发语言都有的机制,并不是deviceone的独创,在某些语言称之为消息(Event),有些地方称之为(Message). 其实原理是类似的,只不过有些实现的方式要复杂一点.我们deviceone统一就叫消息. 消息基础概念 还有一些初学者不太熟悉这个机制,我们先简单介绍一些基础概念,如果熟悉的人可以跳过这个部分.一个/条消息可以理解为是一个数据结构,包含以下几个基本部分: 消息源 :就是消息的来源,发出这个消息的对象 消息名 :就是消息的唯一标示 消息数据:消息发出后附

[转]as3事件流机制彻底理解

题记: 看过网上一些as3事件流的教程,觉得大多都讲得不甚清楚,让人不能喝很直观的理解.而这篇教程以将事件流过程比喻成捕鱼过程,形象简单. 在此基础上对于as3事件流总算有了全面的理解.事件流机制说白了就是为了能让开发者能更好地控制事件调用顺序. addEventListener(type:String, listener:Function, useCapture:Boolean= false, priority:int= 0, useWeakReference:Boolean= false):

深入理解js Dom事件机制(二)——添加事件处理程序

深入理解js Dom事件机制(一)--事件流 事件就是当用户或者浏览器自身执行的某种动作,诸如 click.mouseover等都是事件的名称,那响应个事件的函数就称为事件处理程序(事件处理函数.事件句柄). 事件处理程序的名字都是以on+事件名称命名,比如 click事件的事件处理程序就是onclick, 为某个事件指定事件处理程序的方式大致分为三种. 1.HTML事件处理程序 这个很简单,大家基本初学js的时候都应该用过,就不再赘述,直接看实例代码 <!DOCTYPE html> <

JavaScript事件机制

<script type="text/javascript" src="http://runjs.cn/gist/2zmltkfa/all"></script> [前端培养-作业01]javascript事件机制 1.javascript事件模型 2.e.target与e.currentTarget是干什么的? 3.preventDefault与stopPropagation是干什么的 4.什么是dispatchEvent? 5.说一说事件代