emitter 增强 多条件触发
;(function(global ,undefined){
var evts = {}
,onceTag = '__event_once'
function emit(event ){
var args = util.toArray(arguments , )
if (!(event in evts)) return
var _dels = []
for (var i = , j = evts[event].length ; i < j ;i ++){
var cbk = evts[event][i]
if (!cbk) return
cbk.apply(null , args)
if (cbk[onceTag]) { evts[event][i] = null ; _dels.push[i]}
}
for (var i = _dels.length - ; i>= ; i--) evts[event].splice(_dels[i] , )
}
function addMultiCon(event , listener){
var once = true
event.sort()
addListener(event.join('|') , listener , once)
var eventBubbles = []
function tinOpener(evt){
eventBubbles.push(evt)
if (eventBubbles.length >= event.length) {
eventBubbles.sort()
emit(eventBubbles.join('|'))
}
}
for (var i = ; i < event.length;i ++){
addListener(event[i] , tinOpener.bind(null, event[i]) , once)
}
}
function addListener(event , listener , once){
if (util.isArray(event)) return addMultiCon(event , listener)
if (!(event in evts)) evts[event] = []
if (once) listener[onceTag] = true
evts[event].push(listener)
}
function removeListener(event, listener){
if (!listener) {
delete evts[event]
return
}
for (var i = , j = evts[event].length ; i < j ;i ++){
if (evts[event][i] === listener) { evts[event].splice(i, ) ; break}
}
}
function listeners(event){
return evts[event]
}
global.emitter = {
on : addListener
,once : function(event , listener){
addListener(event , listener , true)
}
,emit : emit
,listeners : listeners
}
})(this)
function toArray(colletions ,offset){
return Array.prototype.slice.call(colletions , offset || )
}
emitter.on(['test','test2'] , function(){
console.log('test is fired')
})
emitter.emit('test')
emitter.emit('test2')
emitter 增强 多条件触发的更多相关文章
- 边缘触发(Edge Trigger)和条件触发(Level Trigger)
int select(int n, fd_set *rd_fds, fd_set *wr_fds, fd_set *ex_fds, struct timeval *timeout); sele ...
- 条件触发和边缘触发 及 epoll 的长处
条件触发: 仅仅要输入缓冲有数据就会一直通知该事件 边缘触发: 输入缓冲收到数据时仅注冊1次该事件.即使输入缓冲中还留有数据,也不会再进行注冊 水平触发(level-triggered.也被称为条件触 ...
- sqlalchemy中使用event设置条件触发短信与邮件通知
一.原因 近期在做短信与邮件通知系统.使用到了这一块.例如,当订单完成以后进行邮件短信的通知.虽然可以采用直接调用接口的方式实现,但有几个原因让我希望使用条件触发的方式 1.由于系统中支持线上线下以及 ...
- CRM ORDER SEARCH增强查询条件(已有字段)
ORDER_H表增强的两个字段,很早了,非AET,非EEWB,所以也加不到标准的搜索界面. GENIL_MODEL_BROWSER找到对应的查询和结果结构,append进字段:ZZZBRAND. 然后 ...
- 10、网页制作Dreamweaver(扩展:各浏览器对 onunload 事件的支持与触发条件实现有差异)
标准参考 在 HTML 4.01 规范中关于 onunload 事件的描述是:当 document 从 window 中移除时,触发 onunload 事件. 关于 HTML 4.01 规范中 onu ...
- 各浏览器对 onbeforeunload 事件的支持与触发条件实现有差异
转载:http://www.w3help.org/zh-cn/causes/BX2047 标准参考 无. 问题描述 一般情况下,onbeforeunload 事件处理函数内会写入一些提示性语句,当用户 ...
- 触发redo写的几个条件
触发redo写的几个条件 作者:eygle |English [转载时请标明出处和作者信息]|[恩墨学院 OCM培训传DBA成功之道]链接:http://www.eygle.com/archive ...
- odoo开发笔记:Server+Action服务器动作自动触发执行
Odoo的市场定位是SME(中小型企业),这个市场的ERP产品,多如牛毛,产品各具特色.不过,Odoo的自动化处理机制,可以睥睨天下,无人能及.包括一些大型国产软件,如用友.金蝶也不具备 ...
- linux 条件变量与线程池
条件变量Condition Variables 概述 1. 条件变量提供了另外一种线程同步的方式.如果没有条件变量,程序需要使用线程连续轮询(可能在临界区critical section内)方式检查条 ...
随机推荐
- linux 下password加密程序(能够用于替换shadow文件里的用户password)
源代码例如以下: #include <stdio.h> #include <unistd.h> int main(int argc, char *argv[]){ if(arg ...
- 微软ASP.NET网站部署指南(3):使用Web.Config文件的Transformations
1. 综述 大多数程序里都会在Web.config里设置參数,而且在部署的时候须要更改. 每次都手工更改这些配置非常乏味,也easy出错. 该章节将会告诉你假设通过自己主动化更新Web.config文 ...
- linux网络启动报错
报错信息: shutting down interface eth0: error:device "eth0" (/org/freedsktop/networkMaager/Dev ...
- 0x18 总结与练习
这一章不太满意啊.. 还是有点痛苦,但就是做的挺慢啊... 1.就是例题 2.括号画家 感觉这种提高组类型的细节题都没什么信心啊,fail了几次才A #include<cstdio> #i ...
- poj--3207--Ikki's Story IV - Panda's Trick(2-sat)
Ikki's Story IV - Panda's Trick Time Limit: 1000MS Memory Limit: 131072KB 64bit IO Format: %I64d ...
- POJ 3660 Floyd传递闭包
题意:牛有强弱,给出一些牛的强弱的胜负关系,问可以确定几头牛的排名. 思路: Floyd传递闭包 // by SiriusRen #include <bitset> #include &l ...
- ORA-16019 和 ORA-16018 错误的处理方法(转)
一. ORA-16019 和 ORA-16018 错误产生描述 同事在修改归档目录,一不小心把参数设置错误了, 他设置的是log_archive_dest参数. 这个参数和默认log_archive_ ...
- Repeater控件使用小结持续更新
Repeater嵌套Repeater绑定数据 前台代码 <!--注意层级关系不要写错了--> <asp:Repeater ID="rpGroup" runat=& ...
- mybatis通用的crud的接口
http://git.oschina.net/jrl/mybatis-mapper https://www.oschina.net/p/mybatis-plus
- usaco 最少找零
Description 约翰在镇上买了 T 元钱的东西,正在研究如何付钱.假设有 N 种钞票,第 i 种钞票的面值为 Vi,约翰身上带着这样的钞票 Ci 张.商店老板罗伯是个土豪,所有种类的钞票都有无 ...