一个自定义事件类

初衷是使用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. volatile关键字的介绍和使用

    关键字volatile的主要作用是使变量在过个线程中可见 1.假设volatile不存在我们将会面对的问题 public class PrintString implements Runnable { ...

  2. table获取checkbox是否选中的几种方法

    function test() { $(".table tbody tr").find("td:first input:checkbox").each(func ...

  3. Android Studion的Monitor中显示No Debuggable Application的解决方法

    在使用Android Studion的时候,突然android Monitor中无法下拉显示调试项目,只是一直提示No Debuggable Application,然后上网搜索的解决办法: 第一种方 ...

  4. JS实现复制到剪贴板(兼容FF/Chrome/Safari所有浏览器)

    现在浏览器种类也越来越多,诸如 IE.Firefox.Chrome.Safari等等,因此现在要实现一个js复制内容到剪贴板的小功能就不是一件那么容易的事了. 在FLASH 9 时代,有一个通杀所有浏 ...

  5. Python 字符串语法,for

    #-*- coding:utf-8 -*- #字符串的拼接方式一 a = "hello" b = "world" c = a + " " + ...

  6. Spring4 Web开发新特性

    基于Servlet3开发. 针对RESTful开发,提供了@RestController,加在Controller上面,免除了每个@RequestMapping method上面的@ResponseB ...

  7. javax.naming.NoInitialContextException错误的解决方案

    今天,学习用了一下nutz框架,写了一个HelloWorld的小程序,在用jndi配置数据源时,写了一个测试类,并在main方法中调用了jndi获得数据库连接,但是报错了,错误信息如下: javax. ...

  8. nodejs基础 -- buffer缓冲区

    JavaScript 语言自身只有字符串数据类型,没有二进制数据类型.但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存 ...

  9. Unity3D之碰撞体,刚体

    一 概念介绍 刚体 Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力用来保证游戏对象像在真实世界中那样进行运动.任何游戏对象只有添加了刚体组件才能受到重力的影 ...

  10. sip 认证分析

    转自:http://blog.csdn.net/wangqi0079/article/details/11569489 SIP类似Http协议.其认证模式也一样.Http协议(RFC 2616 )规定 ...