使用模型在Backbone.js中过滤/排序集合

时间:2012-04-19 19:50:14

标签: javascript backbone.js

经过几天的阅读教程和搜索谷歌我已经碰壁了......

我正在使用backbone.js创建一个应用程序,该应用程序具有带有各种视图的项目模型/项目集合以显示项目。应用程序的一部分将允许用户创建组(并使用现有组)来显示Items Collection的子集。

将有一个具有各种视图的组模型/组集合,以显示组并允许用户将项目与特定组关联。

问题是每个项目可以属于一个,多个或没有任何组,我无法弄清楚如何使用组模型根据与其关联的项目或此项目来获取项目集合的子集甚至是正确的方法。

真的很感激任何帮助!

1 个答案:

答案 0 :(得分:3)

取决于您实际拥有的模型数量,存储位置以及在UI中呈现它们的方式取决于您如何进行此操作。

如果存在许多模型,这些模型存储在远程服务器上的数据库中,并且组的项目将单独呈现,则一种方法是按需加载组的项目。也许像是......

var Item = Backbone.Model.extend({});
var ItemColleciton = Backbone.Collection.extend({
  url: '/load-items',
});

var Group = Backbone.Model.extend({
  items: new ItemCollection(),
  initialize: function() {
    // load the groups items as the group is initialized
    this.items.fetch({data:{groupID:this.id}});
  }
});

或者,如果模型较少,您可能希望一次加载它们,并使用过滤来填充组。像这样......

var Item = Backbone.Model.extend({});
var ItemColleciton = Backbone.Collection.extend({
  url: '/load-groups',
});

var Group = Backbone.Model.extend({
  initialize: function() {
    // load the groups items as a subset of the already loaded group collection
    this.items = new ItemCollection(allItems.filter(function(item) {
      return item.GroupID = this.id;
    }, this));
  }
});

// in your router init ...
var allItems = new ItemCollection();
allItems.fetch();

以上只是示例方法。在使用骨干一段时间之后我发现的是,它对解释非常开放,并且可以通过不同的方式实现以解决不同的问题。

您可能还希望查看backbone relational。我自己没有使用它,但相信它增加了对模型和集合之间的映射关系的支持。