2010-11-23 6 views
2

Comment obtenir une instance 'MyClass' dans le rappel de jquery.Obtention d'une instance de classe à partir du rappel jquery

function MyClass(){  

    this.message = 'Hello World'; // I need access to this variable in the callback 

    //registering class member function as callback 
    $('div').draggable({drag:this.onDrag}); 

    this.onDrag = function(event,ui){ 

    alert(this.message); // 'this' is jquery object, not MyClass instance; 

    } 
} 

P.S. Une variable globale avec une instance 'MyClass' ou une instance de stockage dans des données n'est pas souhaitable.

Merci!

Répondre

4

Le est juste pour garder une autre référence, je préfère self, comme cette meilleure option ici (OMI):

function MyClass(){  
    var self = this; 
    this.message = 'Hello World'; // I need access to this variable in the callback 

    //registering class member function as callback 
    $('div').draggable({drag:this.onDrag}); 

    this.onDrag = function(event,ui){  
    alert(self.message); 
    } 
} 

L'alternative est de déconner avec le contexte d'un autre plugin que vous ne contrôlez pas vraiment quand (encore une fois , OMI) ce n'est pas vraiment nécessaire, juste avoir une autre référence pour accéder à votre classe est tout aussi facile et moins confus dans de nombreux cas.

+0

Oh, c'est une solution vraiment simple pour ça. Merci beaucoup Nick! – Coyod

+0

@Coyod - Bienvenue! –