fabric.js/src/observable.js

62 lines
No EOL
1.5 KiB
JavaScript

/**
* @namespace
*/
fabric.Observable = {
/**
* Observes specified event
* @method observe
* @param {String} eventName
* @param {Function} handler
*/
observe: function(eventName, handler) {
if (!this.__eventListeners) {
this.__eventListeners = { };
}
// one object with key/value pairs was passed
if (arguments.length === 1) {
for (var prop in eventName) {
this.observe(prop, eventName[prop]);
}
}
else {
if (!this.__eventListeners[eventName]) {
this.__eventListeners[eventName] = [ ];
}
this.__eventListeners[eventName].push(handler);
}
},
/**
* Stops event observing for a particular event handler
* @method stopObserving
* @param {String} eventName
* @param {Function} handler
*/
stopObserving: function(eventName, handler) {
if (!this.__eventListeners) {
this.__eventListeners = { };
}
if (this.__eventListeners[eventName]) {
fabric.util.removeFromArray(this.__eventListeners[eventName], handler);
}
},
/**
* Fires event with an optional memo object
* @method fire
* @param {String} eventName
* @param {Object} [memo]
*/
fire: function(eventName, memo) {
if (!this.__eventListeners) {
this.__eventListeners = { }
}
var listenersForEvent = this.__eventListeners[eventName];
if (!listenersForEvent) return;
for (var i = 0, len = listenersForEvent.length; i < len; i++) {
// avoiding try/catch for perf. reasons
listenersForEvent[i]({ memo: memo });
}
}
};