2013-06-22 3 views
1

У меня возникли проблемы с выяснением способа доступа к this в функции render.onload ниже. Я знаю, что ответ, вероятно, связан с закрытием, но я пока не могу обдумать его.Проблема с файлом FileReader в базовой линии

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', но это уже не ссылка на тот же объект. Во внутренней функции «это» является «читателем». Попробуйте присвоить, например, '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; 
} 
Смежные вопросы