我在Backbone应用程序中有一个用户模型,它发出一个ajax请求。在错误回调中,我希望设置一个错误消息以传递给视图。但是,如果我尝试做
this.set({errors: result.errors});
我被告知“这个”没有方法集。在这种情况下,我相信“this”是ajax响应对象(而不是具有set方法的User模型)
Object {url: "/users.json", isLocal: false, global: true, type: "POST", contentType: "application/x-www-form-urlencoded; charset=UTF-8"…}
但是,我也尝试过
this.model.set({errors: result.errors});
但它说我不能称之为未定义的“set”。我假设从模型中说“this.model”是没有意义的,但是,如上所述,如果我只是说“this”,它指的是响应对象。
这是错误的方法吗?
答案 0 :(得分:3)
我假设您在保存模型时正在做这样的事情
model.save({
success: function() {},
error: function() {
this.set({ errors: result.errors });
}
});
如果是这种情况,那么您可以将this.set
更改为model.set
,一切都会有效。
然而,将错误消息存储为模型属性并没有多大意义。
模型将在服务器上的保存调用失败时触发事件(请查看backbone events catalogue)。
因此,如果您有一个附加模型的视图,您可以告诉视图听取此错误事件。
var MyView = Backbone.View.extend({
initialize: function() {
// if your using backbone v0.9.10
this.listenTo(this.model, 'error', this.handleModelError);
// or for earlier versions
this.model.on('error', this.handleModelError, this);
},
handleModelError: function(model, xhr, options) {
// show an error message, or whatever
}
});
var view = new MyView({ model: aModel });
// if the server returns an error, view.handleModelError will be called
aModel.save();
答案 1 :(得分:0)
我认为这可能会失去背景。尝试使用var self = this。类似的东西:
var self = this;
model.save("author", "F.D.R.",
{error: function()
{
self.model.set({errors: result.errors});
}});