improve event_emitter
- add once - _signal = fast _emit without side effects (preventdefault) - capturing argument for addListener
This commit is contained in:
parent
f7e17a7c38
commit
911cbb3bfb
1 changed files with 32 additions and 16 deletions
|
|
@ -32,11 +32,13 @@ define(function(require, exports, module) {
|
|||
"use strict";
|
||||
|
||||
var EventEmitter = {};
|
||||
var stopPropagation = function() { this.propagationStopped = true; };
|
||||
var preventDefault = function() { this.defaultPrevented = true; };
|
||||
|
||||
EventEmitter._emit =
|
||||
EventEmitter._dispatchEvent = function(eventName, e) {
|
||||
this._eventRegistry = this._eventRegistry || {};
|
||||
this._defaultHandlers = this._defaultHandlers || {};
|
||||
this._eventRegistry || (this._eventRegistry = {});
|
||||
this._defaultHandlers || (this._defaultHandlers = {});
|
||||
|
||||
var listeners = this._eventRegistry[eventName] || [];
|
||||
var defaultHandler = this._defaultHandlers[eventName];
|
||||
|
|
@ -48,18 +50,12 @@ EventEmitter._dispatchEvent = function(eventName, e) {
|
|||
|
||||
if (!e.type)
|
||||
e.type = eventName;
|
||||
|
||||
if (!e.stopPropagation) {
|
||||
e.stopPropagation = function() {
|
||||
this.propagationStopped = true;
|
||||
};
|
||||
}
|
||||
|
||||
if (!e.preventDefault) {
|
||||
e.preventDefault = function() {
|
||||
this.defaultPrevented = true;
|
||||
};
|
||||
}
|
||||
if (!e.stopPropagation)
|
||||
e.stopPropagation = stopPropagation;
|
||||
if (!e.preventDefault)
|
||||
e.preventDefault = preventDefault;
|
||||
if (!e.target)
|
||||
e.target = this;
|
||||
|
||||
for (var i=0; i<listeners.length; i++) {
|
||||
listeners[i](e);
|
||||
|
|
@ -71,6 +67,26 @@ EventEmitter._dispatchEvent = function(eventName, e) {
|
|||
return defaultHandler(e);
|
||||
};
|
||||
|
||||
|
||||
EventEmitter._signal = function(eventName, e) {
|
||||
var listeners = (this._eventRegistry || {})[eventName];
|
||||
if (!listeners)
|
||||
return;
|
||||
|
||||
for (var i=0; i<listeners.length; i++)
|
||||
listeners[i](e);
|
||||
};
|
||||
|
||||
EventEmitter.once = function(eventName, callback) {
|
||||
var _self = this;
|
||||
var newCallback = function() {
|
||||
fun && fun.apply(null, arguments);
|
||||
_self.removeEventListener(event, newCallback);
|
||||
};
|
||||
this.addEventListener(event, newCallback);
|
||||
};
|
||||
|
||||
|
||||
EventEmitter.setDefaultHandler = function(eventName, callback) {
|
||||
this._defaultHandlers = this._defaultHandlers || {};
|
||||
|
||||
|
|
@ -81,7 +97,7 @@ EventEmitter.setDefaultHandler = function(eventName, callback) {
|
|||
};
|
||||
|
||||
EventEmitter.on =
|
||||
EventEmitter.addEventListener = function(eventName, callback) {
|
||||
EventEmitter.addEventListener = function(eventName, callback, capturing) {
|
||||
this._eventRegistry = this._eventRegistry || {};
|
||||
|
||||
var listeners = this._eventRegistry[eventName];
|
||||
|
|
@ -89,7 +105,7 @@ EventEmitter.addEventListener = function(eventName, callback) {
|
|||
listeners = this._eventRegistry[eventName] = [];
|
||||
|
||||
if (listeners.indexOf(callback) == -1)
|
||||
listeners.push(callback);
|
||||
listeners[capturing ? "unshift" : "push"](callback);
|
||||
};
|
||||
|
||||
EventEmitter.removeListener =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue