Skip to content

Instantly share code, notes, and snippets.

@edom18
Last active December 14, 2015 07:59
Show Gist options
  • Save edom18/5054911 to your computer and use it in GitHub Desktop.
Save edom18/5054911 to your computer and use it in GitHub Desktop.
Simple Event dispatcher with CoffeeScript.
class Disposal
constructor: ->
dispose: ->
@el?.parentNode?.removeChild @el
@el = null
@off?()
@disposeInternal.apply @, arguments
disposeInternal: ->
# ----------------------------------------------
class EventDispatcher extends Disposal
on: (evtName, func, context = @) ->
evtHandlers = @evtHandlers or (@evtHandlers = {})
handler = evtHandlers[evtName] or (evtHandlers[evtName] = [])
handler.push [func, context]
return @
off: (evtName, func) ->
evtHandlers = @evtHandlers or (@evtHandlers = {})
if evtName?
handler = evtHandlers[evtName] or (evtHandlers[evtName] = [])
for i in [0...handler.length]
if handler[i]?[0] is func
handler.splice i, 1
else
@evtHandlers = {}
return @
fire: (evtName, data) ->
evtHandlers = @evtHandlers or (@evtHandlers = {})
handler = evtHandlers[evtName] or (evtHandlers[evtHandlers] = [])
for i in [0...handler.length]
handler[i][0].call handler[i][1], data
return @
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment