我试图在模型中的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;
});
答案 0 :(得分:1)
由于underscorejs是backbonejs的依赖,你可以使用_.bind
帮助器:
_.bind(func [, thisArg, arg1, arg2, …])
创建一个函数,在调用时,使用
func
调用this
绑定thisArg
并将任何其他绑定参数添加到那些参数 传递给绑定函数。
success: _.bind(function(data) {
console.log("File available at: " + data.name);
this.set({image: {"name" :data.name, "__type" : "File"}});
}, this)
这将允许您在成功回调中访问this
。
答案 1 :(得分: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" } });
}
})