DRY up subscribe and subscribeToCommand

subscribeToCommand now supports unsubscribing by object.
This commit is contained in:
Kevin Sawicki & Nathan Sobo
2013-05-16 13:43:18 -07:00
parent d76d0a030f
commit 848ce7936f

View File

@@ -1,23 +1,24 @@
_ = require 'underscore'
module.exports =
subscribe: (eventEmitter, subscribeArgs...) ->
eventEmitter.on(subscribeArgs...)
subscribeWith: (eventEmitter, methodName, args) ->
eventEmitter[methodName](args...)
@subscriptions ?= []
@subscriptionsByObject ?= new WeakMap
@subscriptionsByObject.set(eventEmitter, []) unless @subscriptionsByObject.has(eventEmitter)
eventName = _.first(subscribeArgs)
callback = _.last(subscribeArgs)
eventName = _.first(args)
callback = _.last(args)
subscription = cancel: -> eventEmitter.off eventName, callback
@subscriptions.push(subscription)
@subscriptionsByObject.get(eventEmitter).push(subscription)
subscribeToCommand: (view, eventName, callback) ->
view.command eventName, callback
@subscriptions ?= []
@subscriptions.push(cancel: -> view.off eventName, callback)
subscribe: (eventEmitter, args...) ->
@subscribeWith(eventEmitter, 'on', args)
subscribeToCommand: (eventEmitter, args...) ->
@subscribeWith(eventEmitter, 'command', args)
unsubscribe: (object) ->
if object?