Backbone 的通用错误处理程序

Generic error handler for Backbone

我正在尝试为我的模型和集合设置一个通用的错误处理程序。我做了这样的事情:

var originalFetchModel = Backbone.Model.prototype.fetch;
Backbone.Model.prototype.fetch = function(options){
    var originalError = options.error;
    options.error = function(model, error){
        if (originalError){ originalError(model, error, options); }
        //my logic here
    }
    originalFetchModel.apply(this, arguments);
};

这对于获取来说工作得很好,但我不能让它工作于保存。 当我做这样的事情时:

model.save(modelDetails, {
              success: function (model) {
                  //logic
              }
          }); 

我的印象是错误回调被覆盖了。 有人知道怎么做吗?

您可以覆盖 Backbone.sync 并使用 jQuery 返回的承诺来全局处理错误。像

(function() {
    var orgsync = Backbone.sync;

    Backbone.sync = function(method, model, options) {
        var xhr = orgsync.call(this, method, model, options);
        xhr.fail(function() {
            console.log('global error handler', method);
        });
        return xhr;
    }
})();

还有一个演示 http://jsfiddle.net/nikoshr/qm6z4sqy/