自定义事件类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数据响应的基 ...
随机推荐
- Phalcon学习-model
Model:表与表之间的关系:hasOne 一对一( $fields, $referenceModel, $referencedFields : 当前表中的字段, 对应关系模型, 对应关系模型中表的字 ...
- Android中使用SoundPool来播放音频
今天找素材重做FlappyBird时学习了一下怎样为应用设置背景音频,发现通过封装SoundPool类就能够非常好的做到这一点. SoundPool类比較适合播放一些类似游戏音效这样的比較短促并且较小 ...
- ddddddd
尊敬的老师们: 我在各方面表现优异.在学习方面,始终将学习放在首位,学习成绩名列前茅,在以往考试中从没有挂科记录,并积极参加校内.校外比赛,且多次获奖:在思想方面,积极向党组织靠拢,一直以一名优秀党员 ...
- PHP并发IO编程之路
并发IO问题一直是服务器端编程中的技术难题,从最早的同步阻塞直接Fork进程,到Worker进程池/线程池,到现在的异步IO.协程.PHP程序员因为有强大的LAMP框架,对这类底层方面的知识知之甚少, ...
- TensorFlow基础笔记(0) tensorflow的基本数据类型操作
import numpy as np import tensorflow as tf #build a graph print("build a graph") #生产变量tens ...
- vector、map删除当前记录
map<string, string> sMap; map<string, string>::iterator iter; for(iter = sMap.begin();it ...
- 有一个TIME的类要求输出分和秒的值
#include <iostream> /* run this program using the console pauser or add your own getch, system ...
- CommonJS初识
CommonJS是什么 CommonJS是一个标准库,或者说是一组规范.因为官方并没有给出真正的代码实现,而是给出一些代码组织规范.常用模块的api.包(Package)的命名规范和具体格式. Com ...
- 转载:MochiWeb一些资料的链接
转自:http://veniceweb.googlecode.com/svn/trunk/public/daily_tech_doc/mochiweb_20091030.txt MochiWeb项目主 ...
- js 离开页面
序言 大家是否经常遇到在关闭网页的时候,会看到一个确定是否离开当前页面的提示框?想一些在线测试系统.信息录入系统等就经常会有这一些提示,避免用户有意或者无意中关掉了页面,导致数据丢失.这里面的实现过程 ...