Backbone.js 如何打电话;。“完成”;在主干提取调用中的ajax调用之后

Backbone.js 如何打电话;。“完成”;在主干提取调用中的ajax调用之后,backbone.js,overriding,fetch,Backbone.js,Overriding,Fetch,我调用的RESTful API没有抛出错误,而是在服务器端出现错误时返回200 success,其中包含一个“fault”对象作为返回数据的一部分。我无法更改API。为了处理这个问题(没有主干网),所有ajax调用都封装在一个类中,该类在ajax调用之后调用“.done”,以处理响应中可能包含的任何“错误”的显示。此外,一些呼叫者需要能够指定指示故障显示位置的设置,而其他呼叫者则依赖于默认位置 我想更改代码以使用主干网的同步功能来保存和检索我的模型和集合,但我不确定如何插入所需的设置值和.don

我调用的RESTful API没有抛出错误,而是在服务器端出现错误时返回200 success,其中包含一个“fault”对象作为返回数据的一部分。我无法更改API。为了处理这个问题(没有主干网),所有ajax调用都封装在一个类中,该类在ajax调用之后调用“.done”,以处理响应中可能包含的任何“错误”的显示。此外,一些呼叫者需要能够指定指示故障显示位置的设置,而其他呼叫者则依赖于默认位置

我想更改代码以使用主干网的同步功能来保存和检索我的模型和集合,但我不确定如何插入所需的设置值和.done函数。我可以重写prototype sync方法并将其更改为调用我们的自定义ajax方法,但是这是一个非常复杂的函数,我很担心我会破坏一些东西。我更愿意找到一些更轻松的方法来调用ajax调用的结果“.done”,但我很难弄清楚如何调用

我了解了如何通过覆盖Backbone.Model.prototype.fetch和Backbone.Collection.prototype.fetch,根据本文-,注入额外的错误处理程序或成功处理程序。但是,这并不能让我直接访问实际的ajax调用返回,因此我没有任何东西可以调用“.done”on,加上“fetch”只能覆盖“get”ajax调用,我需要处理所有主干ajax调用的错误

有人知道怎么处理吗


多谢

我决定重写Backbone.ajax

我发现我在调用fetch时设置的任何属性(我假设这也适用于save和destroy,但还没有测试过)都是通过框架传递给这个方法的,因此我可以根据需要在那里使用它们。对于我如何对主干网的实现进行假设(即假设参数将以特定格式传递给Backbone.ajax),我并不感到激动,但这似乎仍然是最干净的方式

这是我的一些代码,您可以看到我是如何读取errorHandlingSettings参数的。请注意,参数不会直接传递到Backbone.ajax中-它们由Backbone存储,然后在那里引用:

Backbone.ajax = function() {
    var currentArguments = {};
    if(typeof(arguments.callee) != 'undefined' 
        && typeof(arguments.callee.arguments) != 'undefined')
         currentArguments = arguments.callee.arguments[0];
   var errorHandlingSettings = {};
   if(typeof(currentArguments.errorHandlingSettings) != 'undefined')
      errorHandlingSettings = currentArguments.errorHandlingSettings;
      ... etc. - store the "successIfNoFaults" variable.
   var handleFaults = function(data){
      ... etc. (custom code using the errorHandlingSettings and successIfNoFaults variables) ...
   };

   return Backbone.$.ajax.apply(Backbone.$, arguments).done(handleFaults);
};
下面是我如何传递errorHandlingSettings参数(在视图的initialize方法中):

请注意,我还传递了另一个自定义参数“successIfNoFaults”,以便在返回带有错误的200响应时避免调用“success”回调

this.reservationHold.fetch({errorHandlingSettings: {errorPlace:"1",errorPosition:"errorDiv"}, successIfNoFaults:function(){that.render();}});