10
votes

Comment gérer les événements dans JQUERY UI Widgets

J'essaie d'écrire un widget JQuery à la suite du modèle donné Ici . Voici un instantané du widget: xxx

ici Le problème est avec la portée de "Ceci" à l'intérieur de la méthode _titleclick à l'intérieur de la méthode de ce point sur < code> titre élément. Mais j'en ai besoin de pointer vers le widget .

Je pense qu'une façon de le faire sera d'utiliser une classe wrapper comme xxx

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?


0 commentaires

7 Réponses :


3
votes

J'ai écrit une méthode la mienne pour résoudre ce problème xxx


0 commentaires

5
votes

Vous devriez regarder à JQuery.Proxy () http://api.jquerery.com/jQuery. proxy / xxx


1 commentaires

Merci. Ceci est exactement ce que je cherchais.



2
votes

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;
        },


0 commentaires


0
votes

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);
        });
    },


0 commentaires

0
votes

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);
};


1 commentaires

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.



0
votes

Il était utilisé via la jQuery lidez méthode maintenant sur 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 (). xxx


0 commentaires