2016-06-20 16 views
2

Der Einfachheit halber habe ich einige kleine Dateien erstellt, um die Idee zu testen. Im Grunde bin ich für eine Art und Weise auf einem Modul haben zu emittieren und Ereignis suchen, dann gepflückt, dass bis zurück in die Hauptdatei zum BeispielEreignis über Module hinweg teilen

Dies ist die Hauptdatei enthält die App

main.js laufen

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

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

Dies ist, wo das Ereignis

abgefeuert wird

fire.js

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

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


module.exports = Test 

Hier ist das Modul erstellt das Abfeuern von Veranstaltungen für die Anwendung zu handhaben

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 

Wie in den emitter.js ich es Setup in der Lage sein zu sehen Geben Sie einen benutzerdefinierten Typ einschließlich der analysierten Daten aus.

Ich kann nicht scheinen, dies in der ursprünglichen main.js Datei abzuholen. Wenn ich jedoch emit.sendEvent('response', 'banana') im main.js am Ende der Datei platziere, wird es vom obigen Listener aufgenommen. Dies würde anzeigen, dass mein emitter.js korrekt funktioniert.

Irgendwelche Ideen, warum das Ereignis, das in fire.js ausgegeben wird, nicht aufgenommen wird, wäre großartig.

Antwort

4

Dies liegt daran, dass "emit" -Objekt in fire.js und "emit" -Objekt in main.js zwei völlig verschiedene Objekte sind, so dass das Abonnieren von Ereignissen von einem keine Ereignisse von einem anderen abfängt.

Sie können den globalen Emitter exportieren und überall verwenden. Zum Beispiel:

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 
}; 

Auf diese Weise können globale Ereignisobjekt in alle Ihre Module verwenden können:

main.js

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

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

fire.js

+0

Vielen Dank, dass ich seit ein paar Tagen damit zu kämpfen habe und ich hatte das Gefühl, dass es etwas mit den Objekten zu tun hatte, die jedes Mal instanziiert wurden, was bedeutet, dass es keine Vererbung gab. –

Verwandte Themen