0

我在发出 ajax 请求的 Backbone 应用程序中有一个用户模型。在错误回调中,我希望设置一条错误消息以传递给视图。但是,如果我尝试做

this.set({errors: result.errors});

我被告知“this”没有设置方法。在这种情况下,我相信“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});

但它说我不能调用未定义的“集合”。我假设从模型中说“this.model”是没有意义的,但是,如上所述,如果我只说“this”,它指的是响应对象。

这是错误的方法吗?

4

2 回答 2

3

我假设您在保存模型时正在做这样的事情

model.save({
  success: function() {},
  error: function() {
    this.set({ errors: result.errors });
  }
});

如果是这种情况,那么您可以更改this.setmodel.set,一切都会正常进行。

但是,将错误消息存储为模型属性并没有多大意义。

当服务器上的保存调用失败时,模型将触发一个事件(查看主干事件目录)。

因此,如果您有一个带有附加模型的视图,您可以告诉该视图侦听此错误事件。

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();
于 2013-02-11T01:28:22.113 回答
0

我认为这可能会失去背景。尝试使用 var self = this。就像是:

var self = this;
model.save("author", "F.D.R.", 
{error: function()
{ 
    self.model.set({errors: result.errors}); 
}});
于 2013-02-12T01:04:20.300 回答