2016-06-20 22 views
2

簡単にするために、私はアイデアをテストするためにいくつかの小さなファイルを作成しました。基本的に私は、それは例えば、バックメインファイルにモジュール間でイベントを共有する

をピックアップしているモジュールに放出し、イベントにする方法を探していますこれはアプリに

main.jsを実行するために呼び出さメインファイルである

var test = require('./test') 
var emitter = require('./emitter') 
var emit = new emitter() 

emit.on('response', function(data) { 
    console.log(data) 
}) 

イベントが

fire.js

を解雇された場所です emitter.jsに見ることができるようにここで
var emitter = require('./emitter') 
var emit = new emitter 

var Test = function() { 
    emit.sendEvent('response', 'test') 
} 


module.exports = Test 

は、アプリケーションのイベント

emitter.js

var util = require('util') 
var eventEmitter = require('events').EventEmitter 

function Event() { 
    eventEmitter.call(this) 
} 

util.inherits(Event, eventEmitter) 

Event.prototype.sendEvent = function(type, data) { 
    this.emit(type, data) 
} 

module.exports = Event 

の発射を処理するために作成したモジュールは、私はそれをできるようにするにはセットアップを持っています解析されたデータを含む任意のカスタムタイプを出力します。

私は最初のmain.jsファイルでこれを選ぶことはできません。しかし、emit.sendEvent('response', 'banana')をファイルの最後のmain.jsに配置すると、それは上記のリスナーによって取得されます。これは私のemitter.jsが正しく動作していることを示します。

fire.jsで放出されたイベントがなぜ取り上げられていないのかについてのアイデアは素晴らしいものです。

答えて

4

これは、fire.js内の "emit"オブジェクトとmain.js内の "emit"オブジェクトが全く異なる2つのオブジェクトであるため、イベントを購読しても別のイベントを取得しないためです。

グローバルエミッタをエクスポートしてどこでも使用できます。たとえば :

emitter.js

var util = require('util') 
var eventEmitter = require('events').EventEmitter 

function Event() { 
    eventEmitter.call(this) 
} 

util.inherits(Event, eventEmitter) 

Event.prototype.sendEvent = function(type, data) { 
    this.emit(type, data) 
} 
var eventBus = new Event(); 
module.exports = { 
emitter : Event, 
eventBus : eventBus 
}; 

、あなたのすべてのモジュール内のグローバルイベントオブジェクトを使用することができますこの方法:

main.js

var test = require('./test') 
var emitter = require('./emitter') 

emitter.eventBus.on('response', function(data) { 
    console.log(data) 
}) 

fire.js

var emitter = require('./emitter') 

var Test = function() { 
    emitter.eventBus.sendEvent('response', 'test') 
} 


module.exports = Test 
+0

ありがとうございました。私はこれを数日間戦ってきました。ありがとうございました。私は、オブジェクトが継承されていないことを意味するたびにインスタンス化されることとは何かを感じていました。 –

関連する問題