2013-04-14 18 views
13

Chciałbym dowiedzieć się, w jaki sposób dodać strukturę kolekcji w modelu. Moja prosta aplikacja zawiera zespoły (czyli model drużyny i zbiór drużyn), a każda drużyna ma wielu graczy (model gracza i kolekcje graczy). Tak wizualny struktura to jest tak:Jak umieścić kolekcję wewnątrz modelu w Backbone.js?

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

i tak dalej ...

jaki sposób jeden struktura taka aplikacja kręgosłup? Oto, jak planuję to do tej pory: 1) Miałbym kolekcję drużyn, w której znajdowały by się zespoły, których właściwość modelu odpowiada TeamModel. 2) Kolekcja graczy, która pomieściłaby wszystkie odtwarzacze, a właściwości modelu odpowiadałyby PlayerModel.

Teraz jestem zdezorientowany, jak mam kolekcję i model zespołu, korespondować z kolekcją i modelem gracza. To znaczy. według mojego projektu, trzecia relacja byłaby taka, że ​​każda drużyna miałaby kolekcję graczy. Jednak nie jestem pewien, jak to wdrożyć.

Odpowiedz

15

"Teraz jestem zdezorientowany, jak mam kolekcję drużynową i modelkę, koresponduję z kolekcją i modelem gracza. Tj. Według mojego projektu trzecia relacja byłaby taka, że ​​każda drużyna miałaby kolekcję graczy "

Po prostu dodaj atrybut do Modelu zespołu, który będzie kolekcją graczy.

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

Teraz zapełnianie danych to kolejny problem, który ma wiele rozwiązań. Ale robienie rzeczy w ten sposób daje ci silną strukturę.

+0

To pomaga. Dzięki. –

+6

@ clockwork189 Btw, nie sprecyzowałem tego, ale nie możesz umieścić go w * defaults *. W przeciwnym razie wszystkie Twoje wystąpienia będą miały tę samą kolekcję. – Loamhoof

6

Można zrobić coś takiego:

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' 
}); 

a potem, podczas tworzenia wystąpień każdego i zbierać dane z serwera, należy uruchomić router raz wszystkie kolekcje zostały zaludnione. To powinno działać w ten sposób.

Powiązane problemy