2010-09-30 5 views
0

J'ai quelques exemples de code qui ressemble à ceci: « et l'intérieure «Javascript et JQuery obtenir le droit ce

var myDrawingArea = new DrawingArea(document.getElementById("drawing_canvas")); 

function DrawingArea(aCanvas) { 
    this.brushSize = 2; 

    this.buildToolbar = (function() { 
     $("#brush-size") 
      .slider({ 
       value: this.brushSize, // this is DrawingArea instance 
       slide: function (event, ui) { 
        //*************** PROBLEM *************** 
        // this is referring to the slider DOM element not my DrawingArea instance 
        // how can I access both the outer "this" and the inner one? 
        this.brushSize = ui.value; 
        $(this).find(".ui-slider-handle").text(this.brushSize); 
       } 
      }) 
      .find(".ui-slider-handle").text(this.brushSize); 
    }); 
} 

Comme il est dit dans le commentaire » comment puis-je accéder à la fois l'extérieur » ce

Répondre

0

Vous pouvez stocker une référence à, comme ceci:

function DrawingArea(aCanvas) { 
    var self = this; 
    self.brushSize = 2;  
    self.buildToolbar = (function() { 
     $("#brush-size") 
      .slider({ 
       value: self.brushSize, 
       slide: function (event, ui) { 
        self.brushSize = ui.value; 
        $(this).find(".ui-slider-handle").text(self.brushSize); 
       } 
      }) 
      .find(".ui-slider-handle").text(this.brushSize); 
    }); 
} 

Vous pourrait utiliser thisouself en dehors du rappel slide, mais je pense qu'il est plus clair d'être cohérent.

+0

Merci cette idée a amélioré ma qualité de code d'environ 20%. Je ne sais pas pourquoi je n'ai pas trouvé une telle réponse quand j'ai cherché sur des questions précédentes. –

+0

@Geordie - Bienvenue :) Est-ce que cela a résolu votre problème? –

Questions connexes