2013-05-17 4 views
0

Я пытаюсь установить некоторые атрибуты модели внутри вызова ajax внутри модели, но это не работает. Я использовал this.set в функции успеха ajax-вызова, но не работает. Я не знаю точно, что именно.Как я могу ссылаться на модель (позвоночник), где я внутри?

var Person = Backbone.Model.extend({ 
    url:"https://api.parse.com/1/classes/_User/", defaults:{}, 
    initialize:function(){ 
     var self=this.persona; 
     console.log("inperson"); 
     this.upload();  
    },  
    validate:function(){ 
     console.log("validate"); 
    }, 
    upload:function(){ 
     var serverUrl = 'https://api.parse.com/1/files/' + file.name; 
     $.ajax({ 
     type: "POST", 
      beforeSend: function(request) { 
      request.setRequestHeader("X-Parse-Application-Id", 'qS0KLMx**1tyhM9EEPiTS3VMk'); 
      request.setRequestHeader("X-Parse-REST-API-Key", 'nh3eoUo9*s9VQzvbF2gMhcKJIfIt1Gm'); 
      request.setRequestHeader("Content-Type", file.type); 
     }, 
     url: serverUrl, 
     data: file, 
     processData: false, 
     contentType: false, 
     success: function(data) { 
      console.log("File available at: " + data.name); 
      this.set({image: {"name" :data.name, "__type" : "File"}});//THE PROBLEM IS HERE!! 
     }, 
     error: function(data) { 
      var obj = jQuery.parseJSON(data); 
      alert(obj.error); 
     } 
     });    
    } 
}); 
return Person; 
}); 

ответ

1

Как underscorejs является зависимость backbonejs вы можете использовать _.bind помощника:

_.bind(func [, thisArg, arg1, arg2, …])

Создает функцию, которая, при вызове, вызывает func с this связывания thisArg и добавляет любые дополнительные аргументы привязки к , переданным связанной функции.

http://underscorejs.org/#bind

http://lodash.com/docs#bind

success: _.bind(function(data) { 
    console.log("File available at: " + data.name); 
    this.set({image: {"name" :data.name, "__type" : "File"}}); 
}, this) 

Это позволит вам получить доступ к this внутри обратного вызова успеха.

0

$.ajax использует свой контекст (this) в обратных вызовах success/error.

хороший подход (и с использованием меньшего количества символов) будет следующим:

var model = this; 
$.ajax({ 
    // Other properties come here 
    success: function() { 
    console.log("File available at: " + data.name); 
    model.set({ image: { "name": data.name, "__type" : "File" } }); 
    } 
}) 
Смежные вопросы