1 Star 0 Fork 0

animalcoder/Vue

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
Emitter.js 3.42 KB
一键复制 编辑 原始数据 按行查看 历史
animalcoder 提交于 2020-03-17 14:52 +08:00 . Vueinit
// Generated by CoffeeScript 1.6.3
var Emitter, array;
array = require('./array');
module.exports = Emitter = (function() {
function Emitter() {
this._listeners = {};
this._listenersForAnyEvent = [];
this._disabledEmitters = {};
}
Emitter.prototype.on = function(eventName, listener) {
if (this._listeners[eventName] == null) {
this._listeners[eventName] = [];
}
this._listeners[eventName].push(listener);
return this;
};
Emitter.prototype.once = function(eventName, listener) {
var cb, ran,
_this = this;
ran = false;
cb = function() {
if (ran) {
return;
}
ran = true;
listener();
return setTimeout(function() {
return _this.removeEvent(eventName, cb);
}, 0);
};
this.on(eventName, cb);
return this;
};
Emitter.prototype.onAnyEvent = function(listener) {
this._listenersForAnyEvent.push(listener);
return this;
};
Emitter.prototype.removeEvent = function(eventName, listener) {
if (this._listeners[eventName] == null) {
return this;
}
array.pluckOneItem(this._listeners[eventName], listener);
return this;
};
Emitter.prototype.removeListeners = function(eventName) {
if (this._listeners[eventName] == null) {
return this;
}
this._listeners[eventName].length = 0;
return this;
};
Emitter.prototype.removeAllListeners = function() {
var listeners, name, _ref;
_ref = this._listeners;
for (name in _ref) {
listeners = _ref[name];
listeners.length = 0;
}
return this;
};
Emitter.prototype._emit = function(eventName, data) {
var listener, _i, _j, _len, _len1, _ref, _ref1;
_ref = this._listenersForAnyEvent;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
listener = _ref[_i];
listener.call(this, data, eventName);
}
if (this._listeners[eventName] == null) {
return;
}
_ref1 = this._listeners[eventName];
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
listener = _ref1[_j];
listener.call(this, data);
}
};
Emitter.prototype._throttleEmitterMethod = function(fnName, time) {
var lastCallArgs, originalFn, pend, pending, runIt, timer,
_this = this;
if (time == null) {
time = 1000;
}
originalFn = this[fnName];
if (typeof originalFn !== 'function') {
throw Error("this class does not have a method called '" + fnName + "'");
}
lastCallArgs = null;
pending = false;
timer = null;
this[fnName] = function() {
lastCallArgs = arguments;
return pend();
};
pend = function() {
if (pending) {
clearTimeout(timer);
}
timer = setTimeout(runIt, time);
return pending = true;
};
return runIt = function() {
pending = false;
return originalFn.apply(_this, lastCallArgs);
};
};
Emitter.prototype._disableEmitter = function(fnName) {
if (this._disabledEmitters[fnName] != null) {
throw Error("" + fnName + " is already a disabled emitter");
}
this._disabledEmitters[fnName] = this[fnName];
return this[fnName] = function() {};
};
Emitter.prototype._enableEmitter = function(fnName) {
var fn;
fn = this._disabledEmitters[fnName];
if (fn == null) {
throw Error("" + fnName + " is not a disabled emitter");
}
this[fnName] = fn;
return delete this._disabledEmitters[fnName];
};
return Emitter;
})();
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/animalcoder/Vue.git
git@gitee.com:animalcoder/Vue.git
animalcoder
Vue
Vue
master

搜索帮助