`
TracyKelvin
  • 浏览: 21990 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Flex事件机制--自定义事件

    博客分类:
  • Flex
阅读更多

通过[Event]元数据,开发者可以为组件定义事件,将组建和自定义事件关联起来,编译器能够把这些自定义的事件识别为组件属性(将事件名称作为组件的一个属性)

使用[Event]元数据的签名如下:

Event(name="eventName",type="package.eventType")]

name说明了事件的名称,而type表明了该名称对应的事件类型,事件侦听器使用name进行注册。可以为ActionScript组件和MXML组件定义定义事件。

ActionScript组件定义事件,[Event]元数据必须置于包(package)定义之内,类(class)定义之上,如下所示:

package com.esri.comm

{

    import spark.components.Button;

   

    //将事件和组件关联起来

    [Event(name="load",type="com.esri.comm.AppEvent")]

    public class But extends Button

    {

        public function But()

        {

            //TODO: implement function

            super();

        }

    }

}

------------------------------------------------------------------------------------------------

自定义事件和事件派发

自定义事件:

package com.esri.comm

{

    import flash.events.Event;

   

    //自定义一个事件

    public class AppEvent extends Event

    {

        public static const ERROR:String = "eror";

        public static const LOAD:String = "load";

        //type:事件类型

        public function AppEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)

        {

            super(type, bubbles, cancelable);

        }

       

    }

}

<?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"

              xmlns:components="com.esri.comm.*" creationComplete="init()">

    <fx:Declarations>

       <!-- 将非可视元素(例如服务、值对象)放在此处 -->

    </fx:Declarations>

    <fx:Script>

       <![CDATA[

           import com.esri.comm.AppEvent;

           //application的初始化

           private function init():void{

              //调用addEventListener可将事件监听器注册到对象,其中but1_appEventHandler为事件监听器,此处监听类型为loadAppEvent

              this.addEventListener("load",but1_appEventHandler,true);  //Application的对象text监听load事件,并在捕获阶段监听

              panel1.addEventListener(AppEvent.LOAD,but1_appEventHandler,true);//Panel的对象panel1监听load事件,并在捕获阶段监听

              buttn1.addEventListener(AppEvent.LOAD,but1_appEventHandler,false);//Button的对象buttn1监听load事件,并在目标阶段监听,因为buttn1是目标对象

             

              //调用addEventListener可将事件监听器注册到对象,其中but1_appEventHandler为事件监听器,此处监听类型为errorAppEvent

              this.addEventListener("error",but1_appEventHandler2,true);   //Application的对象text监听load事件,并在捕获阶段监听

              panel1.addEventListener(AppEvent.ERROR,but1_appEventHandler2,true);//Panel的对象panel1监听load事件,并在捕获阶段监听

              buttn2.addEventListener(AppEvent.ERROR,but1_appEventHandler2,false);//Button的对象buttn2监听load事件,并在目标阶段监听,因为buttn2是目标对象

           }

          

           //当发生事件时,AppEvent对象将作为参数传递给事件侦听器

           private function but1_appEventHandler(event:AppEvent):void

           {

              //currentTarget:当前正在使用某个事件侦听器处理Event的对象

              trace("load:"+event.currentTarget);

           }

           //当发生事件时,AppEvent对象将作为参数传递给事件侦听器

           private function but1_appEventHandler2(event:AppEvent):void

           {

              //currentTarget:当前正在使用某个事件侦听器处理Event的对象

              trace("error:"+event.currentTarget);

           }

           private function dispatchAppEvent(event:MouseEvent):void

           {

              //调用dispatchEvent方法派发事件的对象为目标对象,由flash player派发一个事件至目标对象buttn1

              buttn1.dispatchEvent(new AppEvent("load",false,false)); //不冒泡,即显示列表中的对象都可以监听到该事件

           }

           private function dispatchAppEvent2(event:MouseEvent):void

           {

              //调用dispatchEvent方法派发事件的对象为目标对象,由flash player派发一个事件至目标对象buttn2

              buttn2.dispatchEvent(new AppEvent("error",false,false)); //不冒泡,即显示列表中的对象都可以监听到该事件

           }

       ]]>

    </fx:Script>

    <s:Panel x="290" y="52" width="321" height="313" id="panel1" title="Panel">

       <s:Button id="buttn2" label="buttn2触发类型为errorAppEvent事件"  click="dispatchAppEvent2(event)" x="10" y="125" height="32" width="234"/>

       <s:Button id="buttn1" label="buttn1触发类型为loadAppEvent事件"  click="dispatchAppEvent(event)" x="10" y="47" height="32" width="234"/>

    </s:Panel>

</s:Application>

 

通过dispatchEvent方法触发事件后,将事件调度到事件流中,然后Flash Player会在事件流中检查显示列表中的每个节点对象是否注册了事件侦听器,如果注册了,则调用事件侦听器来完成针对事件的响应处理。

这里强调下几个概念:

一、事件的派发者(也就是目标对象):调用dispatchEvent方法派发事件的对象,只有EventDispatcher或其子类才能派发事件。

事件监听者:调用addEventListener方法监听事件的对象,只有显示列表中的对象才能捕获到事件,在监听的时候如果监听者不是目标对象,需要将addEventListener方法中的第三个参数即useCapture设置为true,也就是在捕获阶段监听事件。

备注:

Event 类作为创建 Event 对象的基类,当发生事件时,Event 对象将作为参数传递给事件侦听器。

EventDispatcher 类允许显示列表上的任何对象都是一个事件目标。在概念上,到事件目标的此往返行程被划分为三个阶段:

捕获阶段包括从根到事件目标节点之前的最后一个节点的行程;

目标阶段仅包括事件目标节点;

冒泡阶段包括回程上遇到的任何后续节点到显示列表的根,但不包括目标节点。

分享到:
评论

相关推荐

    跟我StepByStep学FLEX教程-王一松.pdf

    1 11 跟我StepByStep学FLEX教程------Event事件机制 1 12 跟我StepByStep学FLEX教程------Demo6之自定义事件&自定义组件 1 13 跟我StepByStep学FLEX教程------自定义事件&自定义组件 1 14 跟我StepByStep学FLEX...

    FLEX 事件机制-自定义事件介绍

    flex封装需要用到自定义事件这方面知识,在这里就简单介绍一下FLEX自定义事件,感兴趣的朋友可以参考下

    flex事件机制的demo

    Flex ActionScript3.0事件机制的Demo, 举例说明了事件的三个阶段,事件的派发,事件的侦听,事件的拦截,自定义事件等相关知识点. 以上知识点在Demo中都有体现,初学者请仔细分析代码,加强理解,多调试、修改、验证以加深...

    FLEX企业应用开发实战.part1

     1.4.3 Flash中的事件机制  1.5 小结 第2章 Flex企业应用开发基础  2.1 MXML语言  2.1.1 用MXML表示ActionScript对象  2.1.2 查看由MXML文件所翻译的ActionScript代码  2.1.3 IMXMLObject接口  2.2 ...

    FLEX企业应用开发实战.part2

     1.4.3 Flash中的事件机制  1.5 小结 第2章 Flex企业应用开发基础  2.1 MXML语言  2.1.1 用MXML表示ActionScript对象  2.1.2 查看由MXML文件所翻译的ActionScript代码  2.1.3 IMXMLObject接口  2.2 ...

    flex FCKEditor 下载

    flex4 FCKEditor下载,很灵活的按钮选择机制,通过自定义功能自动设置功能

    Flex企业应用开发实战源代码

    1.4.3 Flash中的事件机制 12 1.5 小结 20 第2章 Flex企业应用开发基础 21 2.1 MXML语言 21 2.1.1 用MXML表示ActionScript对象 22 2.1.2 查看由MXML文件所翻译的ActionScript代码 24 2.1.3 IMXMLObject接口 25 ...

    Flex内存管理及相关内容

    8. 注册的事件如果没有被移除不影响自定义的强行回收机制,但有可能会影响正常的回收机制,所以最好是做到注册的事件监听器都要记得移除干净。 9. 父对象被删除了不代表其余子对象都删除了,找到一种状态的泄露代码...

    flex3的cookbook书籍完整版dpf(包含目录)

    使用事件冒泡机制 1.12节.使用代码隐藏模式分离MXML和ActionScript 1.13节.组件属性绑定 1.14节.使用自定义事件以及事件数据传递 1.15节.监听键盘事件 1.16节.定义方法参数 1.17节.检测对象数据类型 1.18节.接口的...

    flex android 移动开发

    在手机应用程序中启用持久化机制 在一个手机应用程序中支持多个屏幕大小和 DPI 值 第 5 章: 文本 在手机应用程序中使用文本 手机应用程序中用户与文本的交互 在手机应用程序中支持屏幕键盘 在手机应用程序中嵌入字体...

    使用 Flex 和 Flash Builder 开发手机应用程序

    使用 Flex 和 Flash Builder 开发手机应用程序 目录 第 1 章: 入门 手机应用程序入门 手机、桌面和浏览器应用程序开发的差异 第 2 章: 开发环境 在 Flash Builder 中创建 Android 应用程序 在 Flash Builder 中...

    asp.net知识库

    在ASP.NET页面中推荐使用覆写(Override)而不是事件处理(Event Handler) 常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中...

    面试题

    flex弹性盒 rem和em和vw 盒模型 如何清除浮动 移动端(手机页面)开发需要注意什么? css预处理语言?less和sass 字体图标 回流和重绘 事件传播流程 es6新增的有哪些 原型和原型链 同步和异步 如何发起ajax请求 本地...

    好用的代码生成源码

    rapid-framework是一个以spring为核心的项目脚手架(或者称为胶水框架),框架将各个零散的框架(struts,strust2,springmvc,hibernate,ibatis,spring_jdbc,flex)搭建好,并内置一个代码生成器,辅助项目开发,可以生成...

    Zoomla!CMS5.5.rar

     逐浪CMS独有六大原创技术:独有的自定义模型与节点功能功能、与华夏营销网打造从网站开发到运营推广再到策划营销一体的解决方案、独创的文名作为标题生成格式为符合百度等大型搜索引擎收录提供了友好的支持、完全...

    Flash 反编译工具 Flash Decompiler Trillix 5.3.1400 中文汉化版.zip

    此外,您可以自定义所有的SWF为FLA转换过程中通过配置补间动画,变形, FLA ,文字,动作的选择,等等。 Flash Decompiler Trillix 5.3 汉化版还设有两个Web插件的Internet Explorer和Firefox保存Flash动画在线。 ...

    emWin5用户手册(中文)

    emWin 图形库 图形用户界面 版本 5.12 手册修订版 0 emWin V5.12 用户参考手册 © 1997 - 2011 SEGGER Microcontroller GmbH & Co....9 1 emWin 简介...................................................................

Global site tag (gtag.js) - Google Analytics