我想了解如何在模型中添加结构集合。我的简单应用程序有团队(所以团队模型和团队集合),每个团队都有一堆玩家(玩家模型和玩家收藏)。所以它的视觉结构是这样的:
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相对应感到困惑。即根据我的设计,第三种关系是每个团队都会有一系列玩家。但是我不确定如何实现它。
答案 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'
});
然后,当您创建每个实例并从服务器收集数据时,一旦填充了所有集合,就启动路由器。 它应该这样工作。