0

バックボーンで次のケースをどのように処理するのか疑問に思います。通常、ユーザーがアプリのルートに移動すると、特定のデータセットがバックエンドから読み込まれ、すぐに処理されてからDOMに表示されます。

アプリには、アプリのさまざまなサブセクションに移動するためのリンクがあります。ルーターはナビゲーションをキャッチし、現在のページをナビゲートしたページに置き換えます。これらはすべて、既にフェッチされている同じデータに基づいています。

問題は、ルートURLを経由せずに、データがフェッチされる前のように、ユーザーがその内部/セカンダリURLをブックマークして「コールド」に移動できることです。その状況を処理する慣用的/従来の方法はありますか(ルーターでは、私は想定しています)?

1つの方法は、さまざまなルーターパス処理機能で、操作を完了するのに十分なデータがあるかどうかを確認するメソッドを常に呼び出し、ない場合はそれをフェッチして続行することです。

4

1 に答える 1

1

バックボーンは、電話をかける前にルーターの初期ルートに到達しないBackbone.history.startため、必要なセットアップが完了するまで遅延させることができます。私は通常 start、アプリケーションのメインルーターでメソッドを定義します。次のようになります。

var AppRouter = Backbone.Router.extend({
  start: function() {
    //init code here
    something.fetch({success: function() {
      //only call history start after the necessary initial setup is done
      Backbone.history.start();
    }});
  }
});

次に、その方法を使用してアプリケーションを起動します。

window.app = new AppRouter();
window.app.start();

によって提供される事前定義された部分のみを使用してアプリケーションを構築することを制限するものは何もないことを覚えておくとよいでしょうBackbone。スタートアップコードが重い場合は、ルーターに属していない可能性があります。このような場合、スタートアップロジックをカプセル化するヘルパー関数を定義し、ルーターを完全に除外する必要があります。

//startup.js
function startup(onComplete) {
  //do initialization stuff...
  onComplete();
});

//main.js
startup(function() {
  Backbone.history.start();
});
于 2013-02-20T00:03:24.320 に答える