したがって、私がやりたいのは、ルーターの起動時にBackboneにすべてのコレクションをフェッチさせ、すべてのコレクションを保持して、ルーター内の別のルートに移動するときにすべてのコレクションを再フェッチして再ロードする必要がないようにすることです。誰かがこれを行う方法を知っていますか?
2 に答える
ページの読み込み時にコレクションにデータを入力するためにフェッチを使用しないでください。読み込み時に必要なすべてのモデルは、すでにブートストラップ されて配置されている必要があります。fetchは、すぐには必要とされないインターフェイスのモデルを遅延ロードすることを目的としています。たとえば、開いたり閉じたりすることができるメモのコレクションを含むドキュメントです。
これは私が私のコメントで意味したことです:
<script>
define("data", function() {
return <?php echo json here ?>;
});
</script>
次にvar data = require("data");
、それを使用して、バックボーンモデル/コレクションを初期化できます。これが正しい方法かどうかはわかりません。
さて、バックボーンはデフォルトでこれを行います。ルーターにコードを追加して、各コレクションのインスタンスを作成し、各コレクションでfetch()
1回呼び出すだけです。fetch()
次に、アプリの残りの部分が同じコレクションインスタンスを使用し、それらを再度呼び出さないようにします。とても簡単です。
ただし、アプリケーションの他のビットが呼び出し可能fetch()
であり、必要に応じてキャッシュされたデータをサイレントに使用できるようにする必要があると思います。これは正しく行うのが難しい問題と考えられていますが、単純で単純な実装では、isCached
フラグをコレクションのプロパティとして格納し、オーバーライドされたfetch()
メソッドでそれを確認し、コレクションデータが既に読み込まれている場合は何もせずに戻るだけです。