如何在Backbone.js中的模型中放置一个集合?

时间:2013-04-14 00:49:15

标签: backbone.js backbone.js-collections

我想了解如何在模型中添加结构集合。我的简单应用程序有团队(所以团队模型和团队集合),每个团队都有一堆玩家(玩家模型和玩家收藏)。所以它的视觉结构是这样的:

Team A
   - Player 1
   - Player 2
   - Player 3
Team B
   - Player 1
   - Player 2

依旧......

如何构建这样的骨干应用程序?以下是我到目前为止的规划: 1)我将拥有一个Team Collection,它将拥有多个团队,其模型属性对应于TeamModel。 2)一个Player Collection,它可以容纳所有多个玩家和模型属性,对应于PlayerModel。

现在我对如何拥有Team Collection和Model,与Player Collection和Model相对应感到困惑。即根据我的设计,第三种关系是每个团队都会有一系列玩家。但是我不确定如何实现它。

2 个答案:

答案 0 :(得分:15)

现在我很困惑我将如何拥有Team Collection和Model,与Player Collection和Model相对应。即根据我的设计,第三个关系是每个团队都有一个播放器。

只需在团队模型中添加一个属于玩家集合的属性。

var Team = Backbone.Model.extend({
  initialize: function() {
    // assuming Players a collection of players
    this.set('players', new Players());
  }
});

现在,填充数据是另一个有很多解决方案的问题。但是这样做会给你一个强大的结构。

答案 1 :(得分:6)

您可以执行以下操作:

App.Models.Player = Backbone.Model.extend({});

App.Collections.Players = Backbone.Collection.extend({
    model: App.Models.Player,
    url: 'players',
    getTeam: function(idTeam){
        var gf = _.filter( this.models, function(model){
    return (
        model.get('idTeam') == idTeam
    );
    });
        return gf;
    }
});

App.Models.Team = Backbone.Model.extend({
    players: players( this.get('id') ) // asuming that players is an App.Collections.Players instance.
});

App.Collections.Team = Backbone.Collection.extend({
    model: App.Models.Team,
    url: 'teams'
});

然后,当您创建每个实例并从服务器收集数据时,一旦填充了所有集合,就启动路由器。 它应该这样工作。