0

Node.jsまたはクライアント側で使用できるライブラリを作成しようとしています。

私は2つの問題に直面しています:

  1. 正しくエクスポートできないようです。私はこのドキュメントを使用しています。MyClass = exports? and exports or @MyClass = {}うまくいかないようなので、とりあえずファイルを分割します。

  2. ライブラリはイベントを発行します。これをより簡単に行う方法について、誰かが私の混乱を明確にしてくれることを願っています。以下で私に従ってください:)

Node.js:

としょうかん:

    {EventEmitter} = require 'events'

    class MyClass extends EventEmitter

      emitSomething: (key, data) ->

        @emit key, data

module.exports = MyClass

必須:

MyClass = require 'myclass'
myClass = new MyClass()

myClass.on 'someevent', (data) ->
  console.log data 

# Bare with not using `emit` directly.
data = 
  key: 'value'

myClass.emitSomething 'someevent', data

クライアント側

EventEmitterが含まれています。

class MyClass extends EventEmitter

  emitSomething: (key, data) ->

    @trigger key, [ data ] # That's stupid.

ライブラリファイルはスクリプトに含まれており、私が行っている場所:

myClass = new MyClass()

myClass.on 'someevent', (data) ->
  console.log data 

data = 
  key: 'value'

myClass.emitSomething 'someevent', data

クライアント側

Backbone.js/Underscore.js が含まれています (上記の EventEmitter ライブラリではありません)。

class MyClass

  constructor: () ->

    _.extend @, Backbone.Events

  emitSomething: (key, data) ->

    @trigger key, data # Notice the difference.

ライブラリファイルはスクリプトに含まれており、私が行っている場所:

myClass = new MyClass()

myClass.on 'someevent', (data) ->
  console.log data 

data = 
  key: 'value'

myClass.emitSomething 'someevent', data

では、Node とブラウザの両方にイベントを発行するライブラリを作成する最良の方法は何でしょうか? EventEmitter ライブラリは、両方を含めたときにバックボーンと競合するように見えました (バックボーンの有無にかかわらずノードで動作する必要があります)。もっと簡単な解決策があるはずです!

4

1 に答える 1