J'essaie d'écrire un widget JQuery à la suite du modèle donné Ici .
Voici un instantané du widget: ici Le problème est avec la portée de "Ceci" à l'intérieur de la méthode code> _titleclick code> à l'intérieur de la méthode de ce point sur < code> titre code> élément. Mais j'en ai besoin de pointer vers le widget code> code>. P> Je pense qu'une façon de le faire sera d'utiliser une classe wrapper comme p> Est-ce le meilleur moyen de résoudre ce problème ou existe-t-il un modèle général pour résoudre ce problème? P> P>
7 Réponses :
J'ai écrit une méthode la mienne pour résoudre ce problème
Vous devriez regarder à JQuery.Proxy () http://api.jquerery.com/jQuery. proxy /
Merci. Ceci est exactement ce que je cherchais.
dans votre fonction Créer, init (ou quelque part dans votre instance) Faites ceci:
_myevent: function(event) {
// use the this ptr to access the instance of your widget
this.options.whatever;
},
Je ne savais pas à ce sujet. Je pense que c'est le meilleur choix si vous n'avez pas besoin de faire référence à l'élément qui a été cliqué.
Définir var pérose = ceci em> et utiliser portée em> dans le gestionnaire d'événements. _create: function () {
var scope = this;
$(".btn-toggle", this.element).click(function () {
var panel = $(this).closest(".panel");
$(this).toggleClass("collapsed");
var collapsed = $(this).is(".collapsed");
scope.showBrief(collapsed);
});
},
Une autre façon de faire la même chose sans utiliser la fermeture, c'est transmettre le widget dans la partie des données d'événement comme:
// using click in jQuery version 1.4.3+.
var eventData = { 'widget': this };
// this will attach a data object to the event,
// which is passed as the first param to the callback.
this.elTitle.click(eventData, this._titleClick);
// Then in your click function, you can retrieve it like so:
_titleClick: function (evt) {
// This will still equal the element.
console.log(this);
// But this will be the widget instance.
console.log(evt.data.widget);
};
C'est ce que je ferais quand je dois pouvoir faire référence à l'élément qui a été clic et accédez également à l'instance de widget.
Il était utilisé via la jQuery lidez code> méthode maintenant sur code> est favorisé.
AS de JQuery 1.7, la méthode .on () est la méthode préférée pour attacher des gestionnaires d'événements à un document. Pour les versions antérieures, la .Bind () La méthode est utilisée pour attacher directement un gestionnaire d'événements directement à éléments. Les gestionnaires sont attachés aux éléments actuellement sélectionnés dans l'objet jQuery, de sorte que ces éléments doivent exister au point de l'appel à .bind () se produit. Pour une reliure d'événement plus flexible, voir la discussion de la délégation d'événements dans .on () ou .Delegate (). p> blockQuote>
xxx pré> p>