diff --git a/spec/app/event-emitter-spec.coffee b/spec/app/event-emitter-spec.coffee index 76bac0284..05f318749 100644 --- a/spec/app/event-emitter-spec.coffee +++ b/spec/app/event-emitter-spec.coffee @@ -52,6 +52,13 @@ describe "EventEmitter mixin", -> object.trigger('junk.garbage') describe ".off", -> + describe "when called with no arguments", -> + it "removes all subscriptions", -> + object.off() + object.trigger 'foo' + expect(fooHandler1).not.toHaveBeenCalled() + expect(fooHandler2).not.toHaveBeenCalled() + describe "when called with a non-namespaced event name", -> it "removes all handlers for that event name", -> object.off 'foo' diff --git a/src/app/event-emitter.coffee b/src/app/event-emitter.coffee index a1ea474df..f7dea698b 100644 --- a/src/app/event-emitter.coffee +++ b/src/app/event-emitter.coffee @@ -24,13 +24,16 @@ module.exports = else @eventHandlersByEventName?[eventName]?.forEach (handler) -> handler(event) - off: (eventName, handler) -> + off: (eventName='', handler) -> [eventName, namespace] = eventName.split('.') - eventName = undefined if eventName is '' + eventName = undefined if eventName == '' subscriptionCountBefore = @subscriptionCount() - if namespace + if !eventName? and !namespace? + @eventHandlersByEventName = {} + @eventHandlersByNamespace = {} + else if namespace if eventName handlers = @eventHandlersByNamespace?[namespace]?[eventName] ? [] for handler in new Array(handlers...)