Comment gérer les événements en jQuery UI widgets
Je suis en train d'écrire un widget jQuery suivant le modèle donné ici.
Voici un aperçu du widget:
(function ($) {
$.widget("ui.notification", {
_create: function () {
if (!this.element.hasClass("ntfn")) {
this.element.addClass("ntfn");
}
this.elTitle = this.element.append("<div class='ntfn-title'>Notifications</div>");
this.elTitle.click(this._titleClick)
},
_titleClick: function () {
console.log(this);
}
});
})(jQuery);
Ici, le problème est à la portée de "ce" à l'intérieur de la _titleClick
méthode, à l'intérieur de la méthode par points à la title
élément. Mais j'en ai besoin pour pointer vers le widget
élément.
Je pense qu'une façon de le faire est d'utiliser une classe wrapper comme
var that = this;
this.elTitle.click(function() {
that._titleClick.apply(that, arguments);
});
Est-ce la meilleure façon de résoudre ce problème ou est-il un modèle général pour résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Utiliser le
cette._on()
méthode pour lier le gestionnaire. Cette méthode est fournie par le jQuery UI widget factory et assurez-vous que l'intérieur de la fonction de gestionnaire,this
fait toujours référence à l'instance widget.Vous devriez regarder pour jQuery.proxy() http://api.jquery.com/jQuery.proxy/
J'ai écrit une méthode pour résoudre ce problème
Dans votre créer, init (ou quelque part dans votre exemple), la fonction de cela:
Maintenant définir vos objets événement virage comme ceci:
définir var scope=ce, et l'utilisation portée dans un gestionnaire d'événement.
Une autre façon de faire la même chose sans l'aide de la fermeture, est de passer le widget comme une partie des données d'événement de la sorte:
Il sert à être via jquery
bind
méthode maintenanton
est favorisée.