Contexte d'objet de 'this' dans un événement jQuery
-
28-10-2019 - |
Question
Disons que j'ai défini les éléments suivants en javascript:
com.company.long.namespace = {
actions: {
add: {
defaults: {
url: 'myurl/submit',
},
invoke: function () {
var submitUrl = this.defaults.url;
com.company.long.namespace.foo.util.server.submit({
url: submitUrl,
success: function() { }
});
},
}
}
};
que j'appelle ensuite dans le contexte d'un événement de clic JQuery:
$(myElem).click(function() {
com.company.long.namespace.actions.add.invoke();
});
En raison de la façon dont 'this' fonctionne dans les rappels d'événements jQuery, this.defaults n'est pas défini lorsqu'il est appelé à partir de ce contexte.Est-il possible de toujours utiliser 'this' dans ce cadre, sans avoir à définir l'espace de noms complet, ou sans utiliser jQuery.proxy ?
La solution
Vous ne pouvez pas appeler add
, ce n'est pas une fonction.
Si vous appelez la fonction add.invoke
, this.default
est l'objet par défaut que vous avez défini dans l'objet add
.Vous n'avez rien à faire de spécial.
Exemple: http://jsfiddle.net/p4j4k/
Autres conseils
Pour appeler une fonction avec un contexte de votre choix, vous pouvez utiliser .apply(context)
(plus d'informations sur function.apply et function.call ):
com.company.long.namespace.actions.add.invoke.apply(com.company.long.namespace.foo.util.context);
Dans la fonction d'appel, this
fera référence à l'objet de contexte.
Consultez cet exemple jsFillde