6

コレクションをフィルタリングするのが適切なのと、バックボーンに複数のコレクションがあるのはいつですか?

たとえば、音楽ライブラリアプリについて考えてみます。ジャンルを表示するためのビューと、選択したジャンルの音楽を表示するための別のビューがあります。

すべての音楽を使って1つの巨大なコレクションを作成し、それをフィルタリングするか、それともいくつかの小さなコレクションをフィルタリングするか。

コレクションが1つしかない場合は、他の属性でフィルタリングする機能も追加できますが、音楽がたくさんあるとします。ユーザーが1つのジャンルしか必要としない場合、アプリケーションの起動時にすべてをロードしないようにするにはどうすればよいでしょうか。

4

2 に答える 2

4

最も単純なアプローチは、サーバーからのジャンルデータによってfetch既にフィルタリングされている、共通の一意のコレクションを使用することだと思います。

// code simplified and no tested
var SongsCollection = Backbone.Collection.extend({
  model: Song,
  url: function() {
    return '/songs/' + this.genre;
  },
  initialize: function( opts ){
    this.genre = opts.genre;
  }
});

var mySongsCollection = new SongsCollection({ genre: "rock" });
mySongsCollection.fetch();

ユーザーが選択したジャンルを変更するたびにサーバーからデータを再フェッチするには、このコレクションを作成する必要があります。

mySongsCollection.genre = "punk";
mySongsCollection.fetch();
于 2012-05-10T17:48:18.767 に答える
1

これは主に設計上の選択ですが、私の投票は、コレクションを格納しているデータベースを大まかに反映するスキームを選択することです。

SQLデータベースにデータを格納する可能性が高い場合は、との個別のテーブルがない可能性が高くなりsongsますgenres。おそらく、曲のテーブルの列を介してgenre_id、または(曲が複数のジャンルを持つことができる場合は)別のsong_genres結合テーブルの観点から、それらを接続します。したがって、ジャンルとその中の曲を表す個別のコレクションが必要になる可能性があります。この場合、backbone-relationalは、それらをまっすぐに保つのに役立つ非常に便利なツールである可能性があります。

あらゆる種類のリレーショナル/キー値/ドキュメントストアに情報を保存する場合は、曲と一緒にジャンルを直接保存し、それに応じてフィルタリングするのが理にかなっている場合があります。この場合、直接(たとえば、経由でsongs)またはジャンル(たとえば、genre:genre_id/songs)を介して曲にアクセスできるような方法で、ドキュメントのキー/クエリを保存することになります。これが目的のルートである場合は、曲の1つの膨大なコレクションを作成し、アプリケーション環境とデータベース環境の両方で対応するフィルターを設定することを計画する方が便利な場合があります。

于 2012-05-10T17:09:32.547 に答える