从coffeescript课程中发出事件

Jar*_*ish 0 javascript jquery coffeescript

我想从coffeescript类中发出事件,类似于Backbone.View的做法.

class Countdown extends Backbone.View
countdown = new Countdown
countdown.on "complete", ->
    something()
Run Code Online (Sandbox Code Playgroud)

所以没有backbone.js,例如:

class Countdown extends SomeEmitter
countdown = new Countdown
countdown.start()
countdown.on "complete", ->
    something()
Run Code Online (Sandbox Code Playgroud)

Atm我有这样的事情:

class SomeEmitter
    events: $({})
#So I need to countdown.events.on "complete"
Run Code Online (Sandbox Code Playgroud)

但是这可能会以某种方式重构,所以我从倒计时实例而不是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
Run Code Online (Sandbox Code Playgroud)

我不使用Backbone.Events(或查看代码和复制片段)的原因是因为我有一个完全工作的触发器和方法的jQuery.所以应该可以扩展它,而不是编写我自己的发射器.

nic*_*eet 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'
Run Code Online (Sandbox Code Playgroud)