Add support for off method to remove all handlers for event when not given any handlers.

This commit is contained in:
kangax 2012-10-20 20:11:16 +02:00
parent 8494350baf
commit 70784f55d9
2 changed files with 28 additions and 1 deletions

View file

@ -40,7 +40,12 @@ fabric.Observable = {
this.__eventListeners = { };
}
if (this.__eventListeners[eventName]) {
fabric.util.removeFromArray(this.__eventListeners[eventName], handler);
if (handler) {
fabric.util.removeFromArray(this.__eventListeners[eventName], handler);
}
else {
this.__eventListeners[eventName].length = 0;
}
}
},

View file

@ -35,6 +35,28 @@ test('stopObserving', function() {
equal(false, eventFired);
});
test('stopObserving without handler', function() {
var foo = { };
fabric.util.object.extend(foo, fabric.Observable);
var eventFired = false, event2Fired = false;
var handler = function() {
eventFired = true;
};
var handler2 = function() {
event2Fired = true;
};
foo.on('bar:baz', handler);
foo.on('bar:baz', handler2);
foo.stopObserving('bar:baz');
foo.fire('bar:baz');
equal(false, eventFired);
equal(false, event2Fired);
});
test('observe multiple handlers', function() {
var foo = { };
fabric.util.object.extend(foo, fabric.Observable);