一个自定义事件类

初衷是使用Egret的事件有两点比较麻烦

1   在事件处理函数时,需要从e中获取data

hander(e:egret.Event){
let data = e.data;
}

2   派发事件需要填写额外参数

this.dispatchEvent(new egret.Event("xxx"));
this.dispatchEventWith("xxx", false, data);

使用自定义事件类后

1 事件处理函数获取data较容易

handler(data){
//不需从e中获取data
}

2  派发事件不需填写额外参数

eventManager.sendEvent("xxx")
eventManager.sendEvent("xxx", data)

其中一点使用..args:any[]

public sendEvent(type:string,...args:any[])
listen.apply(thisObject, args)

也可以直接改成 data:any = null

public sendEvent(type:string, data:any = null)
listen.call(thisObject, data)

两者区别在于..args:any[]可以传递多个参数

/**
* 事件管理类
* 一个全局的Event类
* @author chenkai
* @date 2016/8/30
*/
class EventMananger extends SingleClass{
/**事件列表*/
private eventList = {}; /**
* 发送事件
* @type 事件类型
* @args 携带数据
*/
public sendEvent(type:string,...args:any[]){
var arr:Array<any> = this.eventList[type];
if(arr != null){
var len = arr.length;
var listen:Function;
var thisObject:any;
for(var i=;i<len;i++){
var msg = arr[i];
listen = msg[];
thisObject = msg[];
listen.apply(thisObject, args);
}
}
} /**
* 监听事件
* @type 事件类型
* @listener 回调函数
* @thisObject 回调执行对象
*/
public addEvent(type:string, listener:Function, thisObject:any){
var arr:Array<any> = this.eventList[type];
if(arr == null){
arr = [];
this.eventList[type] = arr;
}else{
var len = arr.length;
for(var i=;i<len;i++){
if(arr[i][] == listener && arr[i][] == thisObject){
return;
}
}
}
arr.push([listener, thisObject]);
} /**
* 移除事件
* @type 事件类型
* @listener 回调函数
* @thisObject 回调执行对象
*/
public removeEvent(type:string ,listener, thisObject:any){
var arr:Array<any> = this.eventList[type];
if(arr != null){
var len = arr.length;
for(var i = len-; i>=;i--){
if(arr[i][] == listener && arr[i][] == thisObject){
arr.splice(i,);
}
}
}
if(arr && arr.length == ){
this.eventList[type] = null;
delete this.eventList[type];
}
} }

自定义事件类EventManager (TS中...args的使用例子)的更多相关文章

  1. cocos2dx自定义事件类封装

    GameEvent.h: #pragma once #include "cocos2d.h" USING_NS_CC; class GameEvent { public: //封装 ...

  2. 编写一个自定义事件类,包含on/off/emit/once方法

    function Event() { this._events = {}; } Event.prototype.on = function(type, fn) { if (!this._events[ ...

  3. DragonBones龙骨骨骼中的自定义事件(另有声音、动画事件)

    参考: DragonBones骨骼动画事件系统详解 一.在DragonBones中添加自定义事件帧 动画制作时 时间轴拉到最下面有一个事件层,添加一个事件帧 左边属性面板定义自定义事件 二.Egret ...

  4. 【转】Flash AS3.0 中的自定义事件

    原文 http://www.cnblogs.com/acpp/archive/2010/10/19/1855670.html package { import flash.events.Event; ...

  5. Java Spring 自定义事件监听

    ApplicationContext 事件 定义一个context的起动监听事件 import org.springframework.context.ApplicationListener; imp ...

  6. [置顶] flex4事件监听与自定义事件分发(三)

    1.我们来说一下自定义事件子类.什么时候创建新的事件类以及怎么创建. (1)说一下,我们什么时候需要自定义事件类.举例说明,在flex中事件的基类是Event,而当我们点击某个按钮或者是单击某个组件的 ...

  7. kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件

    该kettle插件功能类似kettle现有的定义java类插件,自定java类插件主要是支持在kettle中直接编写java代码实现自定特殊功能,而本控件主要是将自定义代码转移到jar包,就是说自定义 ...

  8. js自定义事件、DOM/伪DOM自定义事件

    一.说明.引言 我JS还是比较薄弱的,本文的内容属于边学边想边折腾的碎碎念,可能没什么条理,可能有表述不准确的地方,可能内容比较拗口生僻.如果您时间紧迫,或者JS造诣已深,至此您就可以点击右侧广告(木 ...

  9. 由自定义事件到vue数据响应

    前言 除了大家经常提到的自定义事件之外,浏览器本身也支持我们自定义事件,我们常说的自定义事件一般用于项目中的一些通知机制.最近正好看到了这部分,就一起看了下自定义事件不同的实现,以及vue数据响应的基 ...

随机推荐

  1. [Django学习]模型

    ORM简介 MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库 ORM是“对象-关系-映射”的简称 ...

  2. WPF路由事件一:逻辑树和可视树

    一.什么是逻辑树 逻辑树就是描述WPF界面元素的实际构成,它是由程序在XAML中所有的UI元素组成.最显著的特点就是由布局控件.或者其他常用的控件组成. <Window x:Class=&quo ...

  3. MySQL 常用语法 之 UNION与UNION ALL

    下面讲一下mySql中的union和union all 的功能以及区别 A union B 是将表A的数据和表B的数据连接成一张表,前提是查询的两张表的列数一定要一样否则出错. A union all ...

  4. R语言boxplot绘图函数

    boxplot 用于绘制箱线图,我们都知道boxplot 用于展示一组数据的总体分布,在R语言中,支持两种输入数据的方式 第一种:x , 这个参数指定用于绘制箱线图所用的数据,是一个向量 代码示例: ...

  5. 【Java NIO的深入研究】 ServerSocketChannel

    Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样.ServerSocketChannel类在 jav ...

  6. oracle中如何把结果集插入临时表中

    比如临时表叫temp,你要查询的语句为select * from 表名 where id=1. 1.建表temp 2.插入语句: ; commit;  

  7. c++ list sort

      1.  bool operator < (S & b) {      return ID < b.ID;     } struct S { std::string firstn ...

  8. c++ 用构造函数

    1.c++ 用构造函数创建一个对象时,对象里的属性应该是全新的不存在把之前的属性留下的问题.之所以debug里会存在上一个变量的信息,应该是debug里的一个bug,与程序无光.

  9. 如何快捷地使用ChemBio 3D检查结构信息

    ChemBio 3D是一款三维分子结构演示软件,能够轻松快捷地进行化学结构的制作和立体旋转.ChemBio 3D Ultra 14作为ChemBio 3D的最新版本可以更加快捷地制作化学结构.本教程将 ...

  10. NHibernate初学六之关联多对多关系

    1:创建三张表T_Course.T_Student.T_Middle:其中一个学生可以对应多个课程,一个课程也可以对应多个学生,用T_Middle存放它们的关系内容: CREATE TABLE [db ...