6
votes

Nodejs - Singleton + Événements

Comment puis-je hériter des événements.Eventemitter méthodes sur un module implémentant le modèle de conception singleton? XXX

Il résulte de l'erreur: TypeError: Object # n'a pas de méthode 'EMIT'


0 commentaires

3 Réponses :


7
votes

Je ne vois pas le modèle singleton dans votre question. Vous voulez dire quelque chose comme ça? XXX PRE>

Il serait utilisé comme: P>

var Singleton = require('./singleton')
  , a = Singleton.getInstance()
  , b = Singleton.getInstance();

console.log(a === b) // yep, that's true

a.on('foo', function(x) { console.log('foo', x); });

Singleton.getInstance().emit('foo', 'bar'); // prints "foo bar"


2 commentaires

Utilisé singleton.pototype.createclient pour ajouter la fonction de mon exemple. Dans App.js var s = nécessite ('singleton.js'). Getinstance (); S.Createclient ({URL: 'Test'}). Sur ("Connecté", fonction () {}); ne fonctionne pas TypeError: impossible d'appeler la méthode "sur" de non définie


NEWLIND, a dû retour auto pour la chaînage pour travailler: p thx!



5
votes

J'ai réussi à retirer cela en utilisant la classe d'émetteur d'événement Singleton suivant. Arguments.callee._singletonInstance est la manière préférée de faire des singletons en JavaScript: http: // code.google.com/p/jslibs/wiki/javascripttips#singleton_pattern xxx pré>

Vous pouvez ensuite accéder à l'émetteur d'événement dans l'un de vos modules à l'aide des suivants P> Module A: P>

var emitter = require('<path_to_your_emitter>');

emitter.on('myCustomEvent', function(arg1, arg2, ...) {
   . . . this will execute when the event is fired in module A
});


1 commentaires

Et comment exécutons-nous le module B s'il est dans un fichier indépendant. Allons-nous inclure dans notre index.js / app.js?



2
votes

Pour faciliter la tâche, j'ai créé un package NPM: événement central Ce que vous avez à faire est dans le premier module: p>

p>

// Say Something
var emitter = require('central-event');
emitter.on('talk', function(value){
  console.log(value);
  // This will pring hello world
 });


0 commentaires