EventEmitter.off with no args removes all subscriptions

This commit is contained in:
Nathan Sobo
2012-04-26 15:54:12 -06:00
parent 5996233d96
commit fb6a967a18
2 changed files with 13 additions and 3 deletions

View File

@@ -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'

View File

@@ -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...)