Backbone.View と同様に、coffeescript クラスからイベントを発行したいと考えています。
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()
Atm 私はこのようなものを持っています:
class SomeEmitter
events: $({})
#So I need to countdown.events.on "complete"
しかし、これはおそらく何らかの方法でリファクタリングできるので、countdown.events の代わりに countdown インスタンスからイベントを発行します。私のプロジェクトでは 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 を自由に使用できるためです。したがって、独自のエミッターを作成する代わりに、それを拡張できるはずです。