Today I wrote a simple EventSystem where you can add/remove listeners and fire/dispatch events. It is not complicated. The contrast between the code here and what you would have to do in say Java is pretty striking. Each language has it's own trade offs and CoffeeScript (read as dynamic languages) shines quite well here.
class EventManager
constructor:() ->
@listeners = {}
fire:(name, data)->
console.log 'firing'
for lis in @listeners[name]
lis(data)
this
dispatch:(name, data) -> fire(name, data)
add:(name, listener) ->
if name of @listeners
@listeners[name].push(listener)
else
@listeners[name] = [listener]
this
remove:(listener)->
for name,lis of @listeners
idx = lis.indexOf(listener)
if idx != -1
lis.splice(idx, 1)
removeAll:() ->
@listeners = {}
This use case is pretty much this
$ ->
em = new EventManager()
listener = (d)->
console.log "event lis", d
em.add "test", listener
em.fire('test', 100)
em.remove listener
em.fire('test', 'this should not be printed')
I appreciate I could remove a lot more brackets in my code shown. I am still dabbling with how many brackets I like to see in my code. Sometimes having them there makes it feel more readable to my tried brain. Years of coding C/C++/Java take their toll.
No comments:
Post a Comment