【问题标题】:How make $.ajaxSetup rely on a backbone.js model initialized later如何使 $.ajaxSetup 依赖于稍后初始化的主干.js 模型
【发布时间】:2013-07-24 08:50:59
【问题描述】:

我有以下backbone.js应用程序初始化过程:

var app = {
  init: function(arg) {
    $.when(app.loadStaticFiles('any_file_to_load_before'))
    .done(function(args) {
       app.models.current_user = app.Models.User();
     });
    // ... 
    // initializing the backbone app and models
    // ...
    $.ajaxSetup({
       headers: {Authorization: 'Token token=' + app.models.current_user.get('token')}
    })
  }    
}
$(document).ready(
  function(){
    app.init(args);
  };
);

然后当应用程序初始化 $.ajaxSetup 时评估 app.models.current_user.get('token') 遗憾的是没有定义。

我想我的设计中存在一些误解,我应该如何重写我的代码以使其正常工作?

我认为主要问题是$.ajaxSetup() 在$.deferred 分辨率之前的评估。

【问题讨论】:

    标签: jquery backbone.js initialization jquery-deferred


    【解决方案1】:

    延迟用于控制应用程序进程的顺序。从阅读您的问题来看,您的应用程序的顺序似乎需要:

    1. app.loadStaticFiles('any_file_to_load_before')
    2. app.models.current_user = app.Models.User();
    3. $.ajaxSetup(...)
    4. 正在初始化主干应用和模型?

    你可以使用 deferreds 来写这个:

    var app = {
      init: function(arg) {
        $.when(app.loadStaticFiles('any_file_to_load_before'))
          .done(function(args) {
            app.models.current_user = app.Models.User();
          })
          .done(function() {
            $.ajaxSetup({
              headers: {Authorization: 'Token token=' + app.models.current_user.get('token')}
            })
          })
          .done(function() {
            // ... 
            // initializing the backbone app and models
            // ...
          });
       }
    };
    

    需要注意的一个小细节与 jQuery 对 done() 回调的隐含排序有关。在此代码中,您只执行 4 个静态步骤。如果您需要特定的顺序并动态添加.done() 回调,您可能不确定哪个是在其他之前添加的。上面的示例之所以有效,是因为 jQuery 按照添加的顺序运行 .done() 回调。如果您没有这个假设,则必须通过 jQuery 的 .then() 函数在每个完成的步骤中代理/过滤延迟。这样,每个中间步骤将只有 1 个并且只有 1 个 done 回调返回另一个延迟,以便下一个附加 1 个并且只有 1 个回调......等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多