Node.jsまたはクライアント側で使用できるライブラリを作成しようとしています。
私は2つの問題に直面しています:
正しくエクスポートできないようです。私はこのドキュメントを使用しています。
MyClass = exports? and exports or @MyClass = {}
うまくいかないようなので、とりあえずファイルを分割します。ライブラリはイベントを発行します。これをより簡単に行う方法について、誰かが私の混乱を明確にしてくれることを願っています。以下で私に従ってください:)
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 ライブラリは、両方を含めたときにバックボーンと競合するように見えました (バックボーンの有無にかかわらずノードで動作する必要があります)。もっと簡単な解決策があるはずです!