Skip to content

Instantly share code, notes, and snippets.

@donpark
Created January 22, 2014 17:49
Show Gist options
  • Save donpark/8563616 to your computer and use it in GitHub Desktop.
Save donpark/8563616 to your computer and use it in GitHub Desktop.
Generic implementation of EventEmitter for browser in CoffeeScript
class EventEmitter
on: (name, listener) ->
listeners = (@_eventListeners ?= {})[name] ?= []
listeners.push listener
off: (name, listener) ->
if listeners = @_eventListeners?[name]
index = listeners.indexOf listener
listeners[index] = null if index >= 0
emit: (name) ->
if listeners = @_eventListeners?[name]
args = Array.prototype.slice.call arguments, 1
listener?.apply @, args for listener in listeners
once: (name, listener) ->
remover = =>
@off name, listener
@off name, remover
@on name, listener
@on name, remover
addEventListener: @::on
removeEventListener: @::off
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment