2013-06-22 18 views
1

我在找出如何在render.onload函數中訪問this時遇到問題。我知道答案可能涉及關閉,但我還不能完全圍繞它。Backbone中的文件讀取器範圍問題

var PhotoModel = Backbone.Model.extend({ 

    initialize: function() { 
    this.uploadPhoto(); 
    }, 

    uploadPhoto: function() { 
    var file = this.get("file"); 
    var reader = new FileReader(); 
    reader.readAsDataURL(file); 
    reader.onload = function(event) { 
     // I don't have access to "this" here... 
     this.dataURL = event.target.result; 
    } 
    } 

}); 
+0

您有機會獲得'但this'它不再對同一個對象的引用。在內部函數中,'this'是'reader'。嘗試在外部範圍內分配例如'var model = this.model',然後在內部範圍內分配'model.dataURL = ...'。因此,你利用已經形成的閉合。不需要再組成一個。 –

+0

這很有道理。謝謝! –

回答

3

該函數的這樣的範圍之內,以創建一個this參考:

var self = this; // or var that = this; 
reader.onload = function() { 
    // access `this` using `self` 
    self.model.dataURL = event.target.result; 
}