2012-02-16 3 views
1

Existe-t-il une référence globale au widget lui-même une fois qu'il a été créé à l'aide du modèle d'usine de widget jQuery UI?JQuery UI Widget Factory obtient le contexte du widget actuel

J'ai essayé de faire des choses comme la création d'un widget var égal au widget:

$.widget("my.widget", { 
    _widget: this, 
    _create: function() { 
    // _widget should == the whole widget 
    } 
}); 

J'ai aussi essayé saisir le contexte du widget par jQuery comme:

$.widget("my.widget") 

I Vous n'arrivez pas à comprendre comment vous êtes censé pouvoir rappeler le widget, alors qu'il est à l'intérieur du widget.

Répondre

1

Alors que l'intérieur d'une méthode widget vous faites référence à l'instance via le mot-clé « this »:

$.widget('my.widget', { 
    foo: true, 
    _create: function() { 
     var foo = this.getFoo(); 
    }, 
    getFoo: function() { 
     return this.foo; 
    } 

}); 

Si vous êtes dans une méthode et de constater que le contexte a changé (comme cela est souvent le cas lors de l'écriture jQuery), alors vous pouvez simplement stocker une référence à « ceci » dans une var locale:

$.widget('my.widget', { 
    foo: true, 
    _create: function() { 
     var self = this; 
     this.element.click(function() { 
      var foo = self.getFoo(); 
     }); 
    }, 
    getFoo: function() { 
     return this.foo; 
    } 

}); 
1

Comme mentionné précédemment, this est le moyen le plus courant d'appeler des fonctions widget à partir du widget.

Dans votre exemple, il n'a pas de sens de le faire:

_widget: this 

parce que vous auriez besoin le contexte déjà pour se rendre à la variable _widget.

Parfois, il n'est pas possible de sauvegarder le contexte dans un endroit facilement accessible, comme lors de la création d'un gestionnaire d'événements sur un événement qui ne provient pas directement du widget.

De Learning To Use the Widget Factory

Si vous pouvez obtenir le contrôle, soit d'une instance event.target, ou à partir de l'identifiant du contrôle, vous pouvez appeler la fonction .data() sur l'objet jQuery, en passant le nom de la widget. Toutefois, utilisez un tiret, au lieu d'un point, dans le nom du widget.

var $control = $('#' + myControlId); 
var $widget = $control.data("my-widget"); 
$widget.getFoo(); 
Questions connexes