自定义事件类EventManager (TS中...args的使用例子)
一个自定义事件类
初衷是使用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的使用例子)的更多相关文章
- cocos2dx自定义事件类封装
GameEvent.h: #pragma once #include "cocos2d.h" USING_NS_CC; class GameEvent { public: //封装 ...
- 编写一个自定义事件类,包含on/off/emit/once方法
function Event() { this._events = {}; } Event.prototype.on = function(type, fn) { if (!this._events[ ...
- DragonBones龙骨骨骼中的自定义事件(另有声音、动画事件)
参考: DragonBones骨骼动画事件系统详解 一.在DragonBones中添加自定义事件帧 动画制作时 时间轴拉到最下面有一个事件层,添加一个事件帧 左边属性面板定义自定义事件 二.Egret ...
- 【转】Flash AS3.0 中的自定义事件
原文 http://www.cnblogs.com/acpp/archive/2010/10/19/1855670.html package { import flash.events.Event; ...
- Java Spring 自定义事件监听
ApplicationContext 事件 定义一个context的起动监听事件 import org.springframework.context.ApplicationListener; imp ...
- [置顶] flex4事件监听与自定义事件分发(三)
1.我们来说一下自定义事件子类.什么时候创建新的事件类以及怎么创建. (1)说一下,我们什么时候需要自定义事件类.举例说明,在flex中事件的基类是Event,而当我们点击某个按钮或者是单击某个组件的 ...
- kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件
该kettle插件功能类似kettle现有的定义java类插件,自定java类插件主要是支持在kettle中直接编写java代码实现自定特殊功能,而本控件主要是将自定义代码转移到jar包,就是说自定义 ...
- js自定义事件、DOM/伪DOM自定义事件
一.说明.引言 我JS还是比较薄弱的,本文的内容属于边学边想边折腾的碎碎念,可能没什么条理,可能有表述不准确的地方,可能内容比较拗口生僻.如果您时间紧迫,或者JS造诣已深,至此您就可以点击右侧广告(木 ...
- 由自定义事件到vue数据响应
前言 除了大家经常提到的自定义事件之外,浏览器本身也支持我们自定义事件,我们常说的自定义事件一般用于项目中的一些通知机制.最近正好看到了这部分,就一起看了下自定义事件不同的实现,以及vue数据响应的基 ...
随机推荐
- HDU 5289 Assignment(多校2015 RMQ 单调(双端)队列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289 Problem Description Tom owns a company and he is ...
- Jquery easyui教程
目 录 1基本拖放.......................................................................................... ...
- 安装 Windows SDK for Windows 7 时遇到的一个问题及解决办法
最近试着用 VS2010 + Qt 开发程序,发现 VS2010 里面没有提供单独的调试器 cdb,这样用 Qt Creator 时就无法设置断点调试,很不方便.想起 Windows SDK for ...
- LVS学习笔记及总结(思维导图版)
转自: http://www.07net01.com/2015/10/944377.html 下图是我在跟随马哥的脚步学习LVS过程中的学习笔记,以此为蓝本总结的,若有不足之处请谅解!
- 关于Unity中UI中的Button节点以及它的Button组件
Button是最常用的UI节点,包含的组件有 1.Image组件 显示Button的纹理,把Image贴图拖进Image组件中后,记得点击Set Native Size,显示贴图原始大小 2.Butt ...
- android ContentProvider 笔记
学习android的contentprovider.笔记记录于此. contentprovider作用是将数据共享给其他的应用. 参考链接 https://www.tutorialspoint.com ...
- Cookie文件格式解析
原文参考:http://blog.csdn.net/lixianlin/article/details/2738229 1.Cookie文件的实质 Cookie实际上是Web服务端与客户端(典型的是浏 ...
- [转]wcout输出中文却不显示出来
准备使用UNICODE来写个控制台测试程序发现,cout无法输出UNICODE的中文字符.查找C++标准看到,其提供了wcin.wcout.wcerr.wclog用于处理wchar_t字符的输入输出. ...
- Oracle居然把Java EE的未来押在Rest API上了
然而Lehman并不赞同Rahman对Java EE 9的说法,所以他重申Oracle暂时专注于Java EE 8."我们正在倾全力推出EE 8,现在这是我们主要的关注点," ...
- jquery插件大全
241个jquery插件—jquery插件大全 免费JQuery插件 推荐12款非常有用的流行 jQuery 插件