cette référence dans les gestionnaires de strophe Strophe
-
28-10-2019 - |
Question
J'ai un objet pour chaque pièce que je rejoins avec Strophe.Cet objet contient une fonction pour gérer les strophes de présence pour cette salle particulière.
function Room(name, someData)
this.name = name;
this.someData = someData;
this.presenceHandler = function(presence) {
console.log(this.name, this.someData);
}
this.join = function() {
connection.addHandler(this.presenceHandler,null,"presence",null,null,this.name);
connection.send(/*presence*/);
}
}
var connection = new Strophe.Connection(/*http-bind*/);
var mainRoom = new Room("main", {foo: "bar"});
mainRoom.join();
Mais lorsque la fonction mainRoom.presenceHandler()
est appelée par une strophe par Strophe, this
dans la fonction fait référence à la strophe elle-même et non plus à mainRoom
, donc je ne peux plus accéder aux attributs de mainRoom
.
Pourriez-vous me dire comment je peux accéder aux attributs de l'objet room à partir de la fonction presenceHandler?
La solution
this.join = function() {
connection.addHandler(this.presenceHandler,null,"presence",null,null,this.name);
connection.send(/*presence*/);
}
Remplacez le code ci-dessus par ceci
var thiss=this;
this.join = function() {
connection.addHandler(function(presence)
{thiss.presenceHandler(presence);},null,"presence",null,null,this.name);
connection.send(/*presence*/);
}
notez les fermetures pour le gestionnaire
Autres conseils
essayez à nouveau d'initialiser la classe principale dans la fonction ...
function MainFunc() {
this.method1 = function() {
this.property1 = "foo";
}
this.method2 = function() {
var parent = this; // assign the main function to a variable.
parent.property2 = "bar"; // you can access the main function. using the variable
}
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow