Javascript 从coffeescript类发出事件
我想从coffeescript类发出事件,类似于Backbone.ViewJavascript 从coffeescript类发出事件,javascript,jquery,coffeescript,Javascript,Jquery,Coffeescript,我想从coffeescript类发出事件,类似于Backbone.View class Countdown extends Backbone.View countdown = new Countdown countdown.on "complete", -> something() 因此,如果没有backbone.js,例如: class Countdown extends SomeEmitter countdown = new Countdown countdown.start
class Countdown extends Backbone.View
countdown = new Countdown
countdown.on "complete", ->
something()
因此,如果没有backbone.js,例如:
class Countdown extends SomeEmitter
countdown = new Countdown
countdown.start()
countdown.on "complete", ->
something()
我有这样的东西:
class SomeEmitter
events: $({})
#So I need to countdown.events.on "complete"
但这可能会以某种方式被重构,因此我从倒计时实例而不是倒计时.events发出事件。我在我的项目中不使用backbone.js,因此仅将其包含在backbone.Events部分是愚蠢的。我认为应该可以以某种方式扩展$({}),或者jquery(jquery.Event?)中提供的其他东西
更新:
我想我会做点什么:
class SomeEmitter
constructor: ->
@events = ${{})
on: (eventName, cb) =>
@events.on eventName, cb
trigger: (eventName) =>
@events.trigger eventName
我之所以不使用Backbone.Events(或者查看代码和拷贝片段),是因为我有一个完全工作的触发器和on方法来处理jQuery。所以应该可以扩展它,而不是编写我自己的发射器。您可以做这样简单的事情
class SomeEmitter
constructor: ->
@events = complete: []
on: (eventName, cb) =>
@events[eventName].push(cb)
startCountdown: =>
# countdown logic here
for fx in @events.complete
fx()
class Countdown extends SomeEmitter
countdown = new Countdown()
countdown.on 'complete', -> console.log 'done'
@nicksweet为什么要使用粗箭头(
=>
)而不是细箭头?@zac粗箭头只是一种简单的方法,既可以声明函数,又可以将其绑定到当前值“this”,就像只声明函数一样。您可以在此处查看更多信息: