Как разместить коллекцию в модели в Backbone.js?
Я хотел бы получить некоторое представление о том, как добавить структуру коллекции в модель. У моего простого приложения есть команды (например, командная модель и сбор команд), и каждая команда имеет кучу игроков (модели игроков и коллекций игроков). Таким образом, визуальная структура выглядит так:
Team A
- Player 1
- Player 2
- Player 3
Team B
- Player 1
- Player 2
и т.д.
Как создать такую базовую программу? Вот как я планирую до сих пор:
1) У меня была бы Team Collection, в которой было бы несколько команд, свойство модели которых соответствует TeamModel.
2) Коллекция игроков, которая будет содержать все несколько игроков и свойство модели, соответствует модели PlayerModel.
Теперь я смущен относительно того, как я буду иметь коллекцию и модель команды, которые соответствуют коллекции и модели игрока. То есть согласно моему дизайну, третье отношение будет заключаться в том, что каждая команда будет иметь коллекцию игроков. Однако я не уверен, как это реализовать.
Ответы
Ответ 1
"Теперь я смущен относительно того, как я буду иметь коллекцию команд и модель, соответствовать коллекции и модели игрока. То есть, согласно моему дизайну, третья связь будет заключаться в том, что каждая команда будет иметь коллекцию игроков".
Просто добавьте атрибут в свою Командную модель, которая будет коллекцией игроков.
var Team = Backbone.Model.extend({
initialize: function() {
// assuming Players a collection of players
this.set('players', new Players());
}
});
Теперь, заполнение данных - еще одна проблема, которая имеет множество решений. Но делать то, что дает вам сильную структуру.
Ответ 2
Вы можете сделать что-то вроде:
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'
});
И затем, когда вы создаете экземпляры каждого и собираете данные с сервера, запустите маршрутизатор после заполнения всех коллекций.
Он должен работать таким образом.