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 に答える