From 70784f55d9433808d3b3c65ba5ebf54f4130d9e1 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 20 Oct 2012 20:11:16 +0200 Subject: [PATCH] Add support for `off` method to remove all handlers for event when not given any handlers. --- src/observable.js | 7 ++++++- test/unit/observable.js | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/observable.js b/src/observable.js index c0e0790f..14bff7a8 100644 --- a/src/observable.js +++ b/src/observable.js @@ -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; + } } }, diff --git a/test/unit/observable.js b/test/unit/observable.js index 64cd9e89..0e6e4a39 100644 --- a/test/unit/observable.js +++ b/test/unit/observable.js @@ -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);