簡體   English   中英

發出來自Coffeescript類的事件

[英]Emit events from a coffeescript class

我想從coffeescript類發出事件,類似於Backbone.View這樣做。

class Countdown extends Backbone.View
countdown = new Countdown
countdown.on "complete", ->
    something()

因此,例如,如果沒有ribs.js:

class Countdown extends SomeEmitter
countdown = new Countdown
countdown.start()
countdown.on "complete", ->
    something()

Atm我有這樣的事情:

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

但這可能可以通過某種方式進行重構,因此我從countdown實例而不是countdown.events發出事件。 我不在我的項目中使用bone.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方法都可以正常工作。 因此應該可以擴展它,而不是編寫自己的發射器。

您可以做這樣簡單的事情。

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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM