Skip to content

Instantly share code, notes, and snippets.

@Takazudo
Created December 10, 2012 10:42
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Takazudo/4249890 to your computer and use it in GitHub Desktop.
Save Takazudo/4249890 to your computer and use it in GitHub Desktop.
lazy event implementation with jQuery
/* lazy eventy implementation with jQuery */
class Module
on: (evName, callback) ->
@_observer = $({}) unless @_observer?
@_observer.on evName, (args...) =>
args.shift() # we don't want event object
callback.apply @_observer, args
@
one: (evName, callback) ->
@_observer = $({}) unless @_observer?
@_observer.one evName, (args...) =>
args.shift() # we don't want event object
callback.apply @_observer, args
@
off: ->
return @ if @_observer?
@_observer.off.apply @_observer, arguments
@
trigger: ->
return @ unless @_observer?
@_observer.trigger.apply @_observer, arguments
@
class ConcreteClass extends Module
ev = new ConcreteClass
console.log '===== on ====='
ev.on 'ontest', ->
console.log 'ontest'
ev.trigger 'ontest'
ev.trigger 'ontest'
ev.trigger 'ontest'
ev.trigger 'ontest'
console.log '===== on with arg ====='
ev.on 'ontest2', (data) ->
console.log 'ontest2', data
ev.trigger 'ontest2'
ev.trigger 'ontest2', 10
ev.trigger 'ontest2', { val:10 }
console.log '===== one ====='
ev.one 'onetest', ->
console.log 'onetest'
ev.trigger 'onetest'
ev.trigger 'onetest'
ev.trigger 'onetest'
ev.trigger 'onetest'
console.log '===== one with arg ====='
ev.one 'onetest2', (data) ->
console.log 'onetest2', data
ev.trigger 'onetest2', { val:10 }
ev.trigger 'onetest2'
ev.trigger 'onetest2', 10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment