`
strugglesMen
  • 浏览: 115224 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

解析Flex事件机制中Flex事件分发和监听

阅读更多

    在学习Flex的过程中,你可能会遇到Flex事件的概念,这里和大家分享一下,Flex事件可以看作是一种触发机制,比如MouseEvent就是指的当鼠标进行操作之后触发的一系列的事件。

    什么是Flex事件机制

    Flex事件可以看作是一种触发机制,当满足了一定的条件后,会触发这个事件。比如MouseEvent就是指的当鼠标进行操作之后触发的一系列的事件。很多控件中都有click事件,这个事件就是一个MouseEvent的实例,当点击鼠标后,系统会自动抛出一个名称为click的MouseEvent事件(这种方法我们将在后面介绍到)。如果此时在click上注册一个方法,那么触发该事件时就会执行这个方法。

    1.Flex事件分发

    最终继承自EventDispatcher的对象都会含有dispatchEvent这个方法,他有一个参数,事件对象。
    之前说到的事件注册通道,他只是一个通道,实际上事件是由这个方法来分发出去的,通道只是一个管道而已。

    他的作用就是分发一个事件对象,他的分发是没有目的的,一种广播形式的,Flex的事件监听线程会接收到各种各样的事件(我们称之为捕获事件,这在后面会介绍到),那么哪种才是你要的事件,标识就通过事件的type属性来区分。

    1)Flex事件对象

    在分发事件时,将会分发一个事件对象出去。不管是那个事件类,都是继承自flash.events.Event对象的,他包含一些比较重要的属性,type和bubbles。
    type是事件的类型,事件监听通过这个参数来识别是否是自己所监听的事件。
    bubbles是个布尔值,决定了该对象是否会向上传递。默认是false。什么意思呢?画个图就明白了。
    比如说,当button组件分发click事件对象时,设置的bubbles为false,那么他的分发是这样的

    示意代码
     

  1. dispatchEvent(newMouseEvent(“click”,false)); 

事件对象无法跨越组件本身,当然,除了之前讲到的注册通道(这样就很形象了吧)
因此,如果没有注册通道,在Flex主应用中,就无法捕获到这个button组件分发出的事件。

如果我们将Bubbles设为true,他看起来就是这样
 

  1. dispatchEvent(newMouseEvent(“click”,true)); 

可以看到,这个事件可以跨过组件本身,到达Flex主应用里。不止这样,在帮助手册中明确说到,如果在传递过程中间一直没有被捕获的话,这个事件会逐层上传,直到最终的stage,那时如果还没被捕获,这个事件就会被销毁掉。

这样一来,即使我们没有click的事件通道,只要我们在Flex主应用中添加Flex事件监听器(addEventListener)那么我们就可以获得到这个分发出的click事件了。
那么,注册通道不是没用了吗?不是,之前说到过,注册通道是现式的,可见的,因此如果你的组件要给其他人使用,那么就非常一目了然,而不必知道你源码中究竟分发了什么事件。但是,不要监听和注册同一个事件,这样会重复执行的。(后面将讲到)

2.Flex事件监听

在分发中,我们讲到,如果不是通过注册通道来调用触发事件,那么我们是需要一个监听来捕捉的。如何捕捉到分发出的事件,就是通过Flex事件的type值。

比如:
 

  1. <mx:Applicationxmlns:mxmx:Applicationxmlns:mx=http://www.adobe.com/2006/mxmllayout="absolute"xmlns:comp  
  2. creationComplete='init()' 
  3. > 
  4. <mx:Script> 
  5. <![CDATA[  
  6. privatefunctioninit(){  
  7. testBtn.addEventListener(“click”,clickHandler);  

Flex的事件中都提供了一些静态常量,让我们调用,避免我们打错了。因此这句话可以这么写

  1. testBtn.addEventListener(MouseEvent.CLICK,clickHandler); 

我们看到,监听的回调方法中没有传递参数,是的,这和通道的写法有些不同,这里的回调方法(即clickHandler)只是个引用,并不是代表方法的执行,他的含义是,告诉eventLinstener,如果捕捉到click事件,那么就去找clickHandler,并执行它,event对象参数在执行时动态的传递。(如果熟悉ajax的朋友这里应该很容易懂了)

他作用起来就是这样,如果你又注册了click的事件通道,那么这两个都会生效,显然这是多余的。

3.关于异步和执行顺序

以前的说法有误,as里是不存在线程概念的,在远程请求时,结果事件、错误事件都是异步的。如果你需要处理结果,需要利用监听,并在回调中获取你的远程数据。
而在处理本地事件时,他们仍然是同步的。

回调方法执行的顺序甚至还不如dispatchEvent之后的方法。如果接下来的方法依赖于Flex事件回调,那么把接下来的方法写到回调方法中去。

分享到:
评论
1 楼 daiyongcai 2012-08-07  
谢谢了
我自定一个一个事件,在一个as类里定义事件和分发,在主程序mxml中监听,结果总是捕获不到,看了你的文章,这个问题解决了
我原来没弄懂bubbles的意义,把它设为true,可以了

相关推荐

    flex事件机制的分发

    在Flex中,事件机制的分发主要包括三个主要阶段:捕获阶段、目标阶段和冒泡阶段。下面将详细介绍这些阶段以及自定义事件的创建与分发。 1. **捕获阶段**: 在Flex事件流中,捕获阶段是从最外层的UIComponent祖先...

    Flex事件机制详细说明

    Flex支持两种类型的事件:系统内置的事件和用户自定义事件。内置事件由Flex框架提供,用于处理常见的交互场景;自定义事件则允许开发者根据具体需求创建特定类型的事件来扩展Flex的应用能力。 在Flex中,事件模型...

    Flex 事件机制,flex入门学习

    Flex 事件机制是 Flex 应用程序中不可或缺的一部分,它使得组件之间能够有效地通信,响应用户交互以及管理应用程序状态。在深入理解 Flex 事件机制之前,我们需要先了解一下基本概念。 1. **事件的概念** 事件可以...

    flex事件机制分析

    Flex事件机制是Adobe Flex应用程序中处理用户交互和组件通信的核心组成部分。它主要涉及事件流、事件处理程序以及事件对象的概念,这些在构建富互联网应用程序(RIA)时扮演着至关重要的角色。下面将对这些概念进行...

    Flex事件机制(通俗易懂)

    对于初学者而言,理解和掌握Flex中的事件机制是非常重要的一步。本文将深入探讨Flex事件机制的基础概念、事件注册通道、事件触发方式、事件分发机制等关键知识点,并尝试以简单明了的方式进行解释。 #### 二、事件...

    关于flex事件的讲解

    ### 关于Flex事件机制的深度解析 #### 一、引言 在Flex开发过程中,事件机制是理解应用程序交互的关键所在。对于许多初学者而言,掌握Flex中的事件处理机制显得尤为重要。本文将详细介绍Flex中的事件机制及其应用...

    flex 事件流原理

    Flex 事件流是Flex应用程序中事件处理的核心机制,它使得组件之间能够有效地通信和响应用户交互。在深入探讨之前,我们需要理解几个基本概念。 1. **事件机制**:事件是Flex中的一种通信方式,当特定条件满足时,...

    flex-event.zip_flex

    Flex事件机制是Adobe Flex应用程序开发中的关键组成部分,它允许组件之间进行有效的通信和状态管理。在Flex中,事件是用于传递信息的结构化对象,它们从一个源头(通常是组件)发送到其他感兴趣的接收者(监听器)。...

    flexevent.rar_flex

    Flex事件机制是Adobe Flex应用程序开发中的关键组成部分,它允许组件之间进行通信,处理用户交互,以及实现复杂的逻辑。本文将深入探讨Flex事件的基础知识、事件模型、事件生命周期、事件监听器,以及如何自定义事件...

    Flex 事件分发(FlexViewer事件机制)剥离过程

    在进行软件开发过程中,事件分发机制(Event Dispatching Mechanism)是一个核心概念,特别是在客户端开发、图形用户界面(GUI)和各种形式的交互式应用程序中。Flex技术是Adobe公司推出的一个开源框架,用于构建富...

    flex自定义事件、简单例子说明

    在Flex应用开发过程中,事件处理机制是非常重要的一个环节,而自定义事件则是这一机制中的高级特性之一。下面将详细介绍Flex自定义事件的相关知识点。 #### 1. 自定义事件的意义 在Flex应用中,事件是一种对象,...

    用Flex+Java进行软件开发速成篇

    通过本文的学习,读者可以掌握Flex的基本概念和核心技术,特别是对事件机制的理解将有助于更有效地开发出响应式和用户友好的应用程序。同时,结合Java后端进行交互的能力也是现代企业级开发不可或缺的一部分。希望...

    Flex4.0中文API.rar

    10. **事件系统**:Flex 4.0的事件系统支持事件冒泡、事件捕捉和事件分发,开发者可以通过监听和处理事件来响应用户交互或系统变化。 通过阅读“Flex4.0中文API.chm”文档,开发者可以详细了解这些知识点,并学习...

    Flex4视频教程_02-01事件概述.rar

    在Flex4中,事件是表示应用程序状态变化或用户交互的一种通信机制。事件模型允许开发者响应用户操作,如点击按钮、数据变化等,从而实现动态的交互界面。事件由事件源(Event Source)触发,通常是一个组件或对象,...

    Flex电子教案PPT

    事件模型支持事件监听和分发,使得组件之间可以通信和响应特定的行为。常见的事件有点击事件、数据改变事件等。 5. **Flex的组件概述**:Flex提供了一个强大的组件库,包括按钮、文本输入框、列表、面板等,这些预...

    与大家分享一下Flex 学习资料 (续)

    事件驱动编程在Flex中广泛使用,用于响应用户交互、数据更改和其他应用程序状态的改变。 AS3事件处理机制包括以下几个关键知识点: 1. **事件模型**:AS3遵循W3C的事件模型,事件由事件源触发,并通过事件流传播到...

    Flex框架Cairngorm经典案例源码

    2. **事件监听和分发**:使用EventDispatcher进行事件监听和分发,例如,当用户点击按钮时,会触发一个事件,命令类接收到该事件后进行处理。 3. **模型的创建和管理**:案例可能会展示如何创建和使用ModelLocator来...

    Flex基于Producer和Consumer方式的简易消息推送机制

    Flex中的消息推送机制是基于Producer和Consumer模型实现的,这种机制允许应用程序实时地发送和接收消息,常用于构建聊天室、通知系统等实时交互的应用。下面将详细解释Flex消息推送的相关知识点。 1. **Producer与...

    Flex问题解决大全

    组件可以分发事件,而监听器则负责响应这些事件。此外,组件的外观可以通过样式选择器设置,如在Flex4中需要指定命名空间来使用类选择器。效果(Effect)则允许开发者实现平滑的动画效果,如淡入淡出、移动等。 ...

    Flex4.5常见问题总结

    ### Flex4.5常见问题总结 #### 一、Flex4.5组件开发模型与特性 ...综上所述,Flex4.5提供了丰富的工具和机制,帮助开发者构建高性能、高互动性的应用程序。理解并掌握这些核心概念,是高效使用Flex进行开发的基础。

Global site tag (gtag.js) - Google Analytics