0

我试图让我的应用程序在路由器初始化时加载所有数据。加载数据工作正常,问题是当我尝试去一个需要数据太快的路线时它还没有加载数据。如何让数据首先加载并等到路由器完全初始化以处理我的路由视图“计划”?

  window.IrdbWeb = Backbone.Router.extend({
      routes: {
          '':   'home',
          'schedule/':  'schedule' 
      },
      initialize: function() {

          window.encoderStream = new Stream();
          window.scheduleLibrary = new Schedules();
          window.recordingLibrary = new Records();


          $.when(window.encoderStream.fetch(),window.recordingLibrary.fetch(), window.scheduleLibrary.fetch()).done(function(){

                this.scheduleLibraryView = new ScheduleLibraryView({
                        collection:   window.scheduleLibrary 
                    });
          });

          // Player model
          this.player = new Player();                 

          this.playerView = new PlayerView({
                      player: this.player
          });

          $('div#overlay').fadeOut(800);

      },
      home: function() {

      },
      schedule: function() {        

        $("#info").empty().append(this.scheduleLibraryView.render().el);

      }
  });

window.App = new IrdbWeb();
Backbone.history.start();

如果我从家里去 - >安排它工作,因为路线有时间初始化视图。

4

1 回答 1

2
$.when(window.encoderStream.fetch(),
       window.recordingLibrary.fetch(), 
       window.scheduleLibrary.fetch()
).done(function(){
    this.scheduleLibraryView = new ScheduleLibraryView({
        collection: window.scheduleLibrary 
    });

    // all data has been fetched, start routing!
    Backbone.history.start();
});

然而,这实际上是一种反模式。从文档

请注意,不应在页面加载时使用 fetch 来填充集合——加载时所需的所有模型都应该已经引导到位。fetch 旨在为不需要立即需要的接口延迟加载模型:例如,具有可以切换打开和关闭的注释集合的文档。

于 2013-09-06T04:58:22.470 回答