gestionnaires DOMEvent sont traditionnellement appelés avec les éléments qu'ils sont enregistrés comme contexte/« ce ». C'est ce que jQuery fait aussi.
La définir la updateHandler dans le constructeur
var MyClass = Class.create({
initElements: function(sumEl) {
this.sumEl = sumEl;
// save this as that so we can access it from the anonymous function
var that = this;
sumEl.keyup(function()
{
that.updateSum();
});
},
updateSum: function() {
// does something here
}
});
option la plus facile pour vous serait d'utiliser la capacité de jQuery pour gérer les données d'événements
var MyClass = Class.create({
initElements: function(sumEl) {
this.sumEl = sumEl;
sumEl.bind("keyup", this, this.updateSumHandler);
},
updateSumHandler: function(event) {
// event.data is the initial this
// call updateSum with correct context
event.data.updateSum.call(event.data);
},
updateSum: function() {
// does something here
}
});
L'autre possibilité est d'utiliser des fermetures Ceci est un exemple de travail que l'une des autres réponses a essayé de faire. Cela fonctionne parce que la fonction anonyme peut toujours accéder aux variables dans la fonction environnante - mais cela ne fonctionne que si la fonction est réellement définie dans la fonction qui a "that" comme variable locale.
Votre 'that' n'est pas visible dans' updateSumHandler'. –
Non, pourquoi? C'est une fermeture donc ça devrait être dans la portée de updateSumHandler. N'a pas testé ce code, cependant. –