0

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

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

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

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

任何帮助将不胜感激!

4

1 回答 1

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();

以上只是示例方法。我在使用了一段时间后发现,它确实可以解释,并且可以完全不同地实现以解决不同的问题。

You may also wish to check out backbone relational. I've not used it myself, but believe it has added support for mapping relationships between models and collection.

于 2012-04-19T20:38:47.237 回答