Backbone.js 过滤主干中的一个集合与多个集合?

Backbone.js 过滤主干中的一个集合与多个集合?,backbone.js,Backbone.js,什么时候过滤一个集合与主干中有几个集合比较合适 例如,考虑一个音乐库应用程序。它将有一个显示流派的视图和另一个显示所选流派音乐的视图 你是愿意把所有的音乐都收集起来,然后过滤掉,还是选择几个较小的 只要有一个收藏,你就可以添加其他属性过滤的功能,但假设你有大量的音乐:如果用户只需要一种类型,你如何防止在应用程序启动时加载所有音乐?这主要是一种设计选择,但我的投票将是选择一个松散地反映存储集合的数据库的方案 如果您可能要将数据存储在SQL数据库中,则更有可能为歌曲和流派创建单独的表。您可能会通过歌

什么时候过滤一个集合与主干中有几个集合比较合适

例如,考虑一个音乐库应用程序。它将有一个显示流派的视图和另一个显示所选流派音乐的视图

你是愿意把所有的音乐都收集起来,然后过滤掉,还是选择几个较小的


只要有一个收藏,你就可以添加其他属性过滤的功能,但假设你有大量的音乐:如果用户只需要一种类型,你如何防止在应用程序启动时加载所有音乐?

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

如果您可能要将数据存储在SQL数据库中,则更有可能为
歌曲
流派
创建单独的表。您可能会通过歌曲表中的
genre\u id
列将它们连接起来,或者(如果歌曲可以有多个流派)通过单独的
song\u genres
join表将它们连接起来。因此,您可能需要单独的集合来表示流派和其中的歌曲。在这种情况下,可能是非常有用的工具,有助于保持笔直


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

我认为最简单的方法是拥有一个通用的、唯一的歌曲集,它可以智能地,
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();

谢谢,这些听起来像是做出选择的有力论据。这听起来很诱人,但是如果我需要添加另一个搜索过滤器,比如艺术家姓名,该怎么办?我如何告诉服务器,在/songs/elvis中,参数是一个艺术家名称,但它是/songs/rock,它是流派?(是的,我是一个彻头彻尾的休息者)你可以用几种方法来做到这一点。第一个是为每一个都有一个单独的端点,因此您可以使用/songs/artist/elvis和/songs/genre/rock。另一种方法是使用querystring参数,因此可以使用/songs/?artist=elvis&genre=rock。我的首选项是第一个选项,因为它提供了更清晰的URL。