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内)方式检查条 ...
随机推荐
- hdu 3177 Crixalis's Equipment
Crixalis's Equipment Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- nyoj Wythoff Game(暴力枚举)
Wythoff Game ms | KB 描写叙述 近期ZKC同学在学博弈,学到了一个伟大的博弈问题--威佐夫博弈. 相信大家都学过了吧?没学过?没问题.我将要为你讲述一下这个伟大的博弈问题. ...
- java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException
http://blog.csdn.net/you23hai45/article/details/70197502
- LinkedList 方法知识点
package test_day_9; import java.util.Iterator; import java.util.LinkedList; public class LinkedListD ...
- hdoj--1028--Ignatius and the Princess III(母函数)
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- DB-SQL-MySQL-杂项-调优:Mysql千万以上数据优化、SQL优化方法
ylbtech-DB-SQL-MySQL-杂项-调优:Mysql千万以上数据优化.SQL优化方法 1.返回顶部 1. 1,单库表别太多,一般保持在200以下为宜 2,尽量避免SQL中出现运算,例如se ...
- 6 ZigZig Conversion[M]Z字形变换
题目 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows li ...
- 格式化日期字符串 FormatSettings使用
如果 你想要得到 YYYY-MM/DD 这样的字符串 你肯定说这太简单了 直接 ShowMessage(FormatDateTime('YYYY-MM/DD',now)); 运行结果 YYYY-MM ...
- FloatActionButton弹出菜单
浮动按钮的弹出菜单动画 将几个按钮重叠摆放,使用ValueAnimator更新按钮的坐标实现. 布局 <FrameLayout android:layout_width="match_ ...
- mysqldump流程
前几天看到群里在讨论mysqldump导致锁表的问题,为什么一个表已经dump完了还会被锁住?mysqldump里面到底是怎么处理的,为了解答这些问题,就来看看mysqldump.cc中的实现吧. 目 ...