包装骨干同步请求

And*_*rea 3 javascript rest backbone.js

我正在编写一个Backbone应用程序,每当向服务器发出请求时我都需要向用户提供一些反馈(很烦人,我知道,但我无法控制应用程序的这种行为).后端总是报告每个响应的信息(至少在理论上),如

{
  "status":"error",
  "message":"something went really wrong"
}
Run Code Online (Sandbox Code Playgroud)

要么

{
  "status":"success",
  "message":"congratulations",
  "data":{...}
}
Run Code Online (Sandbox Code Playgroud)

我想要了解的是在哪里为某种消息传递服务设置钩子.

一种可能性是parse()模型和集合的方法.为了避免重复,我必须把它放在一些模型基类中.它仍然有点烦人,因为parse()无论如何所有型号和系列都有自己的.

一个更合理的地方是Backbone.sync功能.但是我不想覆盖它,而是想把它包装在其他一些辅助函数中.这里的问题是我找不到一个好的钩子在哪里放置一些逻辑来执行每个请求.

对于如何组织每个请求要执行的逻辑,您有什么建议吗?

And*_*rea 7

因为Backbone.sync返回任何$.ajax返回,很容易通过使用jQuery委托实现我想要的,就像这样

var originalMethod = Backbone.sync;

Backbone.sync = function(method, model, options) {
    var request = originalMethod.call(Backbone, method, model, options);

    request.done(function(msg) {
        console.log(msg);
    });
    request.fail(function(jqXHR, textStatus) {
        console.log(jqXHR, textStatus);
    });
    return request;
};
Run Code Online (Sandbox Code Playgroud)

  • 通过执行`var request = originalMethod.apply(Backbone,arguments);相反,代码将更有可能在API更改中幸存下来. (3认同)