Flex事件机制(三)
上一篇主要以代码的方式说明了如何使用自定义事件在父子组件之间传递数据,那么在开发中,我们可能会遇到另一种情况,就是想在任意一个地方监听到任意一个组件中被触发的事件,这样事件处理更灵活,并不局限于父子组件之间,那么下面就说明这种情况如何处理。
Flex中所有的组件都间接继承自EventDispatcher,通过查看Flex API,了解一下这个类中的方法。
如图所见,该类包含了派发事件、监听事件、移出事件等方法,那么通过这个类就可以实现本文开篇所提出的那种情况,分析一下,监听事件的对象和派发事件的对象必须是同一个对象,这样事件才能被捕获,所以我们需要写一个单例的类,并且组合EventDispatcher,可以满足需求。
events/MyEventDispatcher.as,这里同样不建议以My起头命名,只是测试用。
package events
{import events.MyEvent; import flash.events.Event;import flash.events.EventDispatcher;import flash.events.IEventDispatcher; import mx.core.Singleton;public class MyEventDispatcher{private static var _inst:MyEventDispatcher;private var eventDispatcher:IEventDispatcher;public function MyEventDispatcher(singleton:Singleton){if(singleton == null){throw new Error("Create MyEventDispatcher Error!");}eventDispatcher = new EventDispatcher();}public static function getInstance():MyEventDispatcher{if (!_inst){_inst = new MyEventDispatcher(new Singleton);}return _inst;}public function addEventListener(type:String, listener:Function, useCapture:Boolean=false, pririty:int=0, useWeakReference:Boolean=true):void{eventDispatcher.addEventListener(type, listener, useCapture, pririty, useWeakReference);}public function removeEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=true):void{eventDispatcher.removeEventListener(type, listener, useCapture);}public function dispatchEvent(event:MyEvent):Boolean{return eventDispatcher.dispatchEvent(event);}public function hasEventListener(type:String):Boolean{return eventDispatcher.hasEventListener(type);}public function willTrigger(type:String):Boolean{return eventDispatcher.willTrigger(type);}}
}
class Singleton {}
/*** 派发事件* @return */
public function dispatch():Boolean
{return MyEventDispatcher.getInstance().dispatchEvent(this);
}
<?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="components.*"><s:layout><s:VerticalLayout/></s:layout><components:component1 /><components:component2 />
</s:Application>
components/component1.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"creationComplete="creationCompleteHandler(event)"><fx:Script><![CDATA[import events.MyEventDispatcher;import events.MyEvent;import mx.events.FlexEvent; protected function creationCompleteHandler(event:FlexEvent):void{MyEventDispatcher.getInstance().addEventListener(MyEvent.SHOWINFO, showInfo);} protected function showInfo(event:MyEvent):void{textArea.text = event.data;} ]]></fx:Script><s:TextArea id="textArea" />
</s:Group>
components/component2.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> <fx:Script><![CDATA[import events.MyEvent;import events.MyEventDispatcher;protected function buttonClickHandler(event:MouseEvent):void{var myEvent:MyEvent = new MyEvent(MyEvent.SHOWINFO);myEvent.data = "哈哈";myEvent.dispatch();}]]></fx:Script><s:Button label="显示内容" click="buttonClickHandler(event)"/>
</s:Group>
好,这样就实现了在任意一个地方监听到任意一个组件中被触发的事件的功能,文中如有错误之处,欢迎指出,大家共同进步。
转载于:https://www.cnblogs.com/ghsau/archive/2012/03/26/2768555.html
Flex事件机制(三)相关推荐
- Flex事件机制(一)
Flex事件贯穿我们整个开发,事件分为两类,用户事件和系统事件,比如说我们在页面点击了一个按钮,这是用户触发的事件,当组件初始化完毕,会触发creationComplete事件,这是系统事 ...
- FLEX事件机制整理
一.引 很多新人对Flex的事件机制都不太熟悉,在使用过程中难免会出现各种问题,这是一个非常普遍的问题,为了更快更好的帮助大家,将介绍一下Flex中事件的各种机制和用法. Flex的精髓之一就是事件和 ...
- Flex事件机制(二)
上一篇简单的介绍了Flex的事件机制以及处理事件的四种方式,本篇的主要内容是利用自定义事件在父子组件之间传递数据. 在Flex开发中,很多时候需要在父子组件之间传递数据,通过事件可以实现数据的传递,现 ...
- Android 触摸事件机制(三) View中触摸事件详解
本文将对View中触摸事件相关的内容进行介绍.重点介绍的是dispatchTouchEvent(), onTouchEvent()这两个API以及OnTouchListener接口. 注意:本文是基于 ...
- 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 三 )
Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...
- Web Control 开发系列(三) 解析IPostBackEventHandler和WebForm的事件机制
WebForm最大的魅力大概就是它自己的一套事件处理机制了,要做一个好的Control,必须深入理解这套机制,只有这样才可以让我们的Control有一整套Professional的Event,而IPo ...
- gtest之断言宏的使用以及三种事件机制
前面简单的介绍了一下gtest以及在Windows下如何安装gtest,今天再介绍一下在Linux下该如何安装. 本文重点: 在Linux下如何安装gtest: gtest下断言宏的介绍: gtest ...
- 「前端面试题系列7」Javascript 中的事件机制(从原生到框架)
前言 这是前端面试题系列的第 7 篇,你可能错过了前面的篇章,可以在这里找到: 理解函数的柯里化 ES6 中箭头函数的用法 this 的原理以及用法 伪类与伪元素的区别及实战 如何实现一个圣杯布局? ...
- jQuery中的事件机制深入浅出
昨天呢,我们大家一起分享了jQuery中的样式选择器,那么今天我们就来看一下jQuery中的事件机制,其实,jQuery中的事件机制与JavaScript中的事件机制区别是不大的,只是,JavaScr ...
最新文章
- golang:1.并发编程之互斥锁、读写锁详解
- mysql 报错10614_golang使用go-sql-driver实现mysql增删改操作-Go语言中文社区
- 截取字符串指定内容,并用*号代替
- 获取电脑的唯一识别码_教你如何知道自己的电脑能够装黑苹果
- Android的intent之间复杂参数的传递
- IDEA 快捷键终极大全
- 本土链雷达网_走向本土设计
- 基于事件驱动架构构建微服务第15部分:SPA前端
- linux c之通过popen执行shell命令
- Java系列之雪花算法和原理
- 卖不动了,5G资费套餐再降价,网友:再等等再等等
- html列表按时间排序代码_把 Linux 上的文件列表和排序玩出花来 | Linux 中国
- MyBatis基础入门--知识点总结
- matlab 中文注释乱码问题解决
- WIN7 vc2008【fatal error C1083: 无法打开文件:“Windows.h”: No such file or directory】【cl.exe link.exe手动调用编译】
- SnagIt - 官方网站
- rtmp协议官方规范
- echarts饼图自动动画_echarts实时旋转饼图效果特效
- 阿里java开发规范学习笔记 (V1.5华山版)
- Android Launcher3简介