1

複数の「セクション」を持つBackbone.jsアプリケーションに取り組んでいます。各「セクション」には複数のルートがありますが、単一のコレクションを共有します。簡単な例を次に示します(セクション「a」と「b」を含む):http://jsfiddle.net/scttnlsn/LW4Ny/

この例では、ルーターが初期化されるときにすべてのコレクションがフェッチされるため、すべてのルートハンドラーで再フェッチすることなく、複数のルート間でコレクションを共有できます。これは最初は問題ないように見えますが、共有コレクションの数が増え始めたときにこの方法を継続することには注意が必要です。さらに、ユーザーがアクセスすることさえない「セクション」のコレクションをフェッチするのはばかげているようです。私はむしろオンデマンドでデータをロードしたいと思います。

明らかな代替手段は、ルーターが初期化されるときではなく、各ルートハンドラーでデータをフェッチすることです。これは、実際に必要なデータのみがフェッチされることを意味しますが、同じ「セクション」内のルート間を移動するときに、不要なフェッチを実行することになります。収集データの「共有」はなくなります。

この状況に対処するための良い方法は何ですか?ある種のキャッシュのような構造を実装する必要があるように感じます。既存のソリューションはありますか?

ありがとう!

-スコット

4

1 に答える 1

1

私が問題を理解していると仮定すると...初期化時のフェッチをスキップできますが(説明した代替手段のように)、必要になるまでコレクションのインスタンス化を完全にスキップすることもできます。次に、factory(ish) メソッドを宣言します。

getOrFetchCollection: function(collectionId) {
  var collection = this[collectionId];
  if(!collection) {
    collection = this[collectionId] = new Backbone.Collection();
    collection.url = urlFor(collectionId);
    collection.fetch();
  }
  return collection;
}

次に、各ルート ハンドラー内から呼び出します。

a1: function() {
  var view = new View({ title: 'a1', collection: this.getOrFetchCollection('a') });
  show(view);
}
于 2012-06-06T03:49:12.070 に答える