backbone.js - 使用 Backbone 进行站点范围的错误管理

标签 backbone.js error-handling

问题

我想在我的应用程序中使用一个默认的错误处理程序来处理所有意外错误,但是有些时候(例如保存模型时)会有很多错误,因此我想以自定义方式处理它们,而不是显示一般错误错误页面。

我以前的解决方案

我的Backbone.sync函数以前有这个功能:

if(options.error)
  options.error(response)
else
  app.vent.trigger('api:error', response) # This is the global event channel

但是,这不再起作用,因为主干总是包裹错误函数,因此它可以触发模型上的error事件。

新解决方案1

我可以覆盖模型和集合上的fetchsave方法,以包装options.error并在上面放置代码,但这有点丑陋。

新解决方案2

听模型上的error,虽然这不允许我重写默认错误处理程序。

新解决方案3

传递一个自定义选项以禁用错误的全局触发,尽管如此,这还是多余的。

我错过了什么吗?有推荐的方法吗?

我可以补充一点,我使用的是他们git仓库中的最新版本,而不是他们主页中的最新版本。

最佳答案

您可以在覆盖的同步中执行此操作吗?这似乎完成了您之前所做的相同操作。

// error is the error callback you passed to fetch, save, etc.
var error = options.error;
options.error = function(xhr) {
  if (error) error(model, xhr, options);
  // added line below.
  // no error callback passed into sync.
  else app.vent.trigger('api:error', xhr); 

  model.trigger('error', model, xhr, options);
};

这段代码来自Backbone来源,我只添加了else行。

编辑:

这不是最漂亮的解决方案,但可能对您有用。创建一个新的要使用的Model基类,而不是扩展Backbone.Model,对此进行扩展。
var Model = Backbone.Model.extend({

  // override fetch. Do something similar for save, destroy.
  fetch: function(options){
     options = options ? _.clone(options) : {};
     var error = options.error;
     options.error = function(model, resp) {
       if (error) error(model, resp);
       else app.vent.trigger('api:error', resp); 
     };

     return Backbone.Model.prototype.fetch.apply(this, [options]);
  },
});

var MyModel = Model.extend({});
var model = new MyModel();
model.fetch(); // error will trigger 'api:error'

实际上,这可能总比覆盖sync更好。

可能的替代方法是使用:http://api.jquery.com/ajaxError/
但是这样,无论是否将错误回调传递给主干fetch/save/destroy,您都将收到错误。

关于backbone.js - 使用 Backbone 进行站点范围的错误管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14965815/

相关文章:

javascript - 如何从 Backbone.js $el 中删除 span 元素?

jquery - 无法在backbonejs中的集合上使用create方法

javascript - 简单解释EINVALIDTAGNAME?

c# - 转换varchar值时转换失败

javascript - Backbone/RequireJS 和多个模型

javascript - 扩展 Backbone.Collection/View/Models 的最佳方式

javascript - 主干路由器添加路由功能

ReactJS - 前端表单错误处理程序/验证

python - python-flask处理应用程序错误

r - 为什么空逻辑向量通过 stopifnot() 检查?