0

我想从咖啡脚本类发出事件,类似于 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()
countdown.on "complete", ->
    something()

自动取款机我有这样的事情:

class SomeEmitter
    events: $({})
#So I need to countdown.events.on "complete"

但这可能会以某种方式重构,所以我从倒计时实例而不是 countdown.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(或查看代码和复制片段)的原因是因为我可以使用 jQuery 以及完全正常工作的触发器和 on 方法。所以应该可以扩展它,而不是编写我自己的发射器。

4

1 回答 1

7

你可以做这样简单的事情。

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'
于 2013-06-04T17:44:21.383 回答