gpt4 book ai didi

backbone.js - 如何向所有 Backbone 模型添加默认错误处理程序?

转载 作者:行者123 更新时间:2023-12-03 16:33:55 26 4
gpt4 key购买 nike

背景:

Backbone 模型提供了一个选项来注册一个回退错误处理程序,每次调用服务器失败时都会调用该错误处理程序,并且没有提供特定的处理程序。

MyModel = new Backbone.Model.extend({
initialize: function(option) {
this.on("error", this.fallbackErrorHandler);
},

fallbackErrorHandler: function() {
// default behavior in case of an error
},

foo: function() {
this.fetch(); // fallbackErrorHandler will be called
this.fetch({ // the inline error handler will be called
error: function() {
// some specific code for this error
}
});
}
});

我想做的事:

我希望我的应用程序中的所有主干模型都有一个回退错误处理程序。
但是 - 我不想为每个模型显式添加处理程序。
我想定义并注册一次处理程序,并将其应用于我的应用程序中的每个主干模型 .
另外, 我不想更改现有代码 我不想改变开发人员在我的应用程序中定义模型的方式。

我已经尝试过的:

我添加了一个初始化程序,它在 Backbone.Model.prototype 对象上注册了一个处理程序。
App.Marionette.addInitializer(function() {
Backbone.Model.prototype.on("error",function(){
// default behavior in case of an error
});
});

此代码有效,并调用了我的回退错误处理程序。
但是,此代码的副作用是在应用程序的任何主干模型中注册的所有错误处理程序都在 Backbone.Model.prototype 上而不是在 Backbone.Model 上注册。所以显然这不是一个好的解决方案。

我还考虑过定义 MyModel 来扩展 Backbone.Model 并注册默认处理程序。我的应用程序中的所有其他模型都将扩展 MyModel 而不是直接扩展 Backbone.Model。
但是,我正在尝试无缝地实现这一点,而无需更改现有代码,然后指示所有开发人员扩展 MyModel 而不是 Backbone.Model。

有没有人有这个问题的解决方案?

最佳答案

Backbone 默认使用 jQuery 的 AJAX 方法调用。你可以直接连接到这个,而不是使用 Backbone:

http://api.jquery.com/ajaxError/

如果这没有给你你想要的,你可以覆盖 Backbone 模型中的“fetch”方法:


var originalFetch = Backbone.Model.prototype.fetch;

Backbone.Model.prototype.fetch = function(options){

var originalError = options.error;

options.error = function(model, error){
if (originalError){ originalError(model, error); }

// call your global error handler here.
App.myGlobalErrorHandler(model, error);

}

originalFetch.apply(this, arguments);
};

关于backbone.js - 如何向所有 Backbone 模型添加默认错误处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13673109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com