Skip to content

Instantly share code, notes, and snippets.

@Meettya
Forked from sdiehl/observer.coffee
Created February 17, 2012 21:45
Show Gist options
  • Save Meettya/1855639 to your computer and use it in GitHub Desktop.
Save Meettya/1855639 to your computer and use it in GitHub Desktop.
Observer Pattern in Coffeescript
# app/environment/observer.coffee
###
This module for global Observer
very simple implementation, but works
and support method chaining
###
module.exports = class Observer
###
Event binding
###
@bind : (event, fn) ->
@_events ?= {}
@_events[event] ?= []
@_events[event].push fn
@
###
Event unbinding
CAVEAT! anonymous function cant be unbinded for some reason
###
@unbind: (event, fn) ->
@_events ?= {}
# must check, last registered event be unbinded as error
if @_events[event]?.indexOf(fn) >= 0
@_events[event]?.splice @_events[event].indexOf(fn), 1
@
###
Event trigger
###
@trigger: (event, args...) ->
@_events ?= {}
if @_events[event]
# we are testing callback defined because
# it may be undef if it been unbinded at previews scope
for callback in @_events[event] when callback
# we are don't want stop ALL callback, just broken
try
callback.apply @, args
catch err_msg
console?.error \
"ERROR: event |#{event}| with args |#{args?.join ', '}| on callback \n #{callback} \n return error |#{err_msg}|"
@
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment