我如何参考我在里面的模型(骨干)?

时间:2013-05-17 15:31:21

标签: javascript backbone.js

我试图在模型中的ajax调用中为模型设置一些属性,但它没有工作。我在ajax调用的成功函数中使用了this.set但是不起作用。我不知道具体的方法。

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;
 });

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

$.ajaxthis / 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" } });
  }
})