3

我正在寻找一种减少代码重复的方法。目前,每当我保存 Backbone 模型时,我总是提供以下代码来将 Rails 库存422响应反序列化为错误属性:

model.save({ name: "..." }, error: function(model, response) {
  result = $.parseJSON(response.responseText)
  model.errors = result.errors
  ...
});

是否可以配置 Backbone,以便在调用我的回调之前反序列化错误?我尝试覆盖该sync方法,但此时回调被包装在一个匿名函数中(并且不再可访问)。

4

1 回答 1

1

您可以使用ErrorHandler由其他需要错误解析的模型扩展的模型。模型应该监听“ErrorHandler错误”事件(在请求后发生错误时由同步函数触发)。

var ErrorHandler = Backbone.Model.extend({

    initialize: function() {
        this.on("error", this.defaultErrorHandler, this);
    },

    defaultErrorHandler: function(model, error) {
        result = $.parseJSON(response.responseText)
        model.errors = result.errors
        ...
    }

});

var OtherModel = ErrorHandler.extend({
    ...
});

var model = new OtherModel();

model.save({ name: "..." });
于 2012-10-28T09:06:57.457 回答