backbone:尝试在失败的ajax请求中为“this”设置错误消息

时间:2013-02-10 23:31:11

标签: backbone.js

我在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”,它指的是响应对象。

这是错误的方法吗?

2 个答案:

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