过滤集合与Backbone中的多个集合?

时间:2012-05-10 17:02:29

标签: backbone.js

何时过滤集合与在Backbone中拥有多个集合?

例如,考虑一下音乐库应用。它可以显示流派和另一个视图,用于显示所选流派的音乐。

您是希望制作一个包含所有音乐的大集合,然后过滤它还是几个较小的音乐?

只有一个集合允许你添加其他属性进行过滤的功能,但是假设你有大量音乐:如果用户只需要1个类型,你如何防止在应用程序启动时全部加载?

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

这主要是设计选择,但我的选择是选择一个松散地反映存储集合的数据库的方案。

如果您可能将数据存储在SQL数据库中,则很可能没有songsgenres的单独表。你可以通过歌曲表中的genre_id列或者(如果歌曲可以有多个类型)在单独的song_genres联接表中连接它们。因此,您可能需要单独的集合来表示流派及其中的歌曲。在这种情况下, backbone-relational 可能是帮助他们保持正确的非常有用的工具。

如果您将信息存储在任何类型的关系/键值/文档存储中,那么直接将该类型与歌曲直接存储并相应地过滤可能是有意义的。在这种情况下,您最终可能会以这样一种方式存储文档密钥/查询,即您可以直接(例如,通过songs)或通过流派(例如genre:genre_id/songs)访问歌曲。如果这是你走的路线,那么简单地创建一个庞大的歌曲集合并计划在应用程序和数据库环境中设置相应的过滤器可能会更方便。