您可以在覆盖的同步中执行此操作吗?这似乎完成了与您之前所做的相同的事情。
// 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
行。
编辑:
这不是最漂亮的解决方案,但可能对您有用。创建一个新的模型基类来使用,而不是扩展 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/ 。但是这样一来,无论您是否将错误回调传递给主干获取/保存/销毁,您都会收到错误消息。