|
|
@ -8,56 +8,57 @@ |
|
|
*/ |
|
|
*/ |
|
|
|
|
|
|
|
|
export default class Events { |
|
|
export default class Events { |
|
|
constructor() { |
|
|
|
|
|
// 定义的事件与回调
|
|
|
|
|
|
this.defineEvent = {}; |
|
|
|
|
|
} |
|
|
|
|
|
// 注册事件
|
|
|
|
|
|
register(event, cb) { |
|
|
|
|
|
if(!this.defineEvent[event]) { |
|
|
|
|
|
(this.defineEvent[event] = [cb]); |
|
|
|
|
|
} |
|
|
|
|
|
else { |
|
|
|
|
|
this.defineEvent[event].push(cb); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
// 派遣事件
|
|
|
|
|
|
dispatch(event, arg) { |
|
|
|
|
|
if(this.defineEvent[event]) {{ |
|
|
|
|
|
for(let i=0, len = this.defineEvent[event].length; i<len; ++i) { |
|
|
|
|
|
this.defineEvent[event][i] && this.defineEvent[event][i](arg); |
|
|
|
|
|
} |
|
|
|
|
|
}} |
|
|
|
|
|
} |
|
|
|
|
|
// on 监听
|
|
|
|
|
|
on(event, cb) { |
|
|
|
|
|
return this.register(event, cb); |
|
|
|
|
|
} |
|
|
|
|
|
// off 方法
|
|
|
|
|
|
off(event, cb) { |
|
|
|
|
|
if(this.defineEvent[event]) { |
|
|
|
|
|
if(typeof(cb) == "undefined") { |
|
|
|
|
|
delete this.defineEvent[event]; // 表示全部删除
|
|
|
|
|
|
} else { |
|
|
|
|
|
// 遍历查找
|
|
|
|
|
|
for(let i=0, len=this.defineEvent[event].length; i<len; ++i) { |
|
|
|
|
|
if(cb == this.defineEvent[event][i]) { |
|
|
|
|
|
this.defineEvent[event][i] = null; // 标记为空 - 防止dispath 长度变化
|
|
|
|
|
|
// 延时删除对应事件
|
|
|
|
|
|
setTimeout(() => this.defineEvent[event].splice(i, 1), 0); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
constructor() { |
|
|
|
|
|
// 定义的事件与回调
|
|
|
|
|
|
this.defineEvent = {}; |
|
|
|
|
|
} |
|
|
|
|
|
// 注册事件
|
|
|
|
|
|
register(event, cb) { |
|
|
|
|
|
if (!this.defineEvent[event]) { |
|
|
|
|
|
this.defineEvent[event] = [cb]; |
|
|
|
|
|
} else { |
|
|
|
|
|
this.defineEvent[event].push(cb); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
// 派遣事件
|
|
|
|
|
|
dispatch(event, arg) { |
|
|
|
|
|
if (this.defineEvent[event]) { |
|
|
|
|
|
{ |
|
|
|
|
|
for (let i = 0, len = this.defineEvent[event].length; i < len; ++i) { |
|
|
|
|
|
this.defineEvent[event][i] && this.defineEvent[event][i](arg); |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// once 方法,监听一次
|
|
|
|
|
|
once(event, cb) { |
|
|
|
|
|
let onceCb = () => { |
|
|
|
|
|
cb && cb(); |
|
|
|
|
|
this.off(event, onceCb); |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
// on 监听
|
|
|
|
|
|
on(event, cb) { |
|
|
|
|
|
return this.register(event, cb); |
|
|
|
|
|
} |
|
|
|
|
|
// off 方法
|
|
|
|
|
|
off(event, cb) { |
|
|
|
|
|
if (this.defineEvent[event]) { |
|
|
|
|
|
if (typeof cb == "undefined") { |
|
|
|
|
|
delete this.defineEvent[event]; // 表示全部删除
|
|
|
|
|
|
} else { |
|
|
|
|
|
// 遍历查找
|
|
|
|
|
|
for (let i = 0, len = this.defineEvent[event].length; i < len; ++i) { |
|
|
|
|
|
if (cb == this.defineEvent[event][i]) { |
|
|
|
|
|
this.defineEvent[event][i] = null; // 标记为空 - 防止dispath 长度变化
|
|
|
|
|
|
// 延时删除对应事件
|
|
|
|
|
|
setTimeout(() => this.defineEvent[event].splice(i, 1), 0); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
this.register(event, onceCb); |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// once 方法,监听一次
|
|
|
|
|
|
once(event, cb) { |
|
|
|
|
|
let onceCb = () => { |
|
|
|
|
|
cb && cb(); |
|
|
|
|
|
this.off(event, onceCb); |
|
|
|
|
|
}; |
|
|
|
|
|
this.register(event, onceCb); |
|
|
|
|
|
} |
|
|
} |
|
|
} |