49 votes

Backbone.js Collection de Collections

Je suis à essayer de comprendre comment faire une Collection de collections avec backbone.js. Je suis assez nouveau à l'épine dorsale. J'ai quelque chose comme la situation suivante:

 +---------------+               +------------------+
 | Playlists     |               | Playlist         |
 |---------------|          0..* |------------------|
 |               +-------------->| Name             |
 |               |               |                  |
 |               |               |                  |
 +---------------+               +-------+----------+
                                         |
                                         |
                                         |0..*
                                         v
                                 +------------------+
                                 |  Track           |
                                 |------------------|
                                 | Name             |
                                 | Artist           |
                                 |                  |
                                 +------------------+

Dans ce code ressemble à ceci:

var trackModel = Backbone.Model.extend({
    //trackdata
});

var playlistModel = Backbone.Collection.extend({
    model : trackModel,
    url   : "playlist"
});

var playlistsModel = Backbone.Collection.extend({
    url   : "playlists",
    model : playlistModel   //This pretty sure doesn't work like I want, becaus there is no model attribute for collections :S
});

Cependant j'ai toujours recevoir une erreur dans le js console en disant: Uncaught TypeError: Object [object object] n'a pas de méthode '_validate' lorsque j'essaie d'exécuter une fonction qui déclenche le valider (comme ajouter, extraire, ...)

Il ne fait aucune différence si j'ajoute le valider ou _validate fonction à l'une des collections ou des modèles.

Je crois que c'est parce que backbone.js ne prend pas en charge les collections en collections. Est-il un autre moyen qui fonctionne?

Merci

Mise à JOUR:

C'est à quoi il ressemble maintenant

var Track = Backbone.Model.extend({ 
    //trackdata 
}); 

var Tracks = Backbone.Collection.extend({ 
    model:Track; 
}); 

var Playlist = Backbone.Model.extend({ 
    //name  : ...
    tracks: new Tracks ()
}); 

var Playlists = Backbone.Collection.extend({ 
    url : "playlists", 
    model : Playlist 
});

30voto

Rob Hruska Points 39151

Vous feriez de résoudre votre problème en mettant votre Playlist à partir d'une collection dans un modèle. Si vous pensez à ce sujet, Playlist aurait probablement d'autres attributs de toute façon (par exemple le nom) qui ne soit pas réglable sur une collection.

Playlists serait alors une collection d' Playlist modèles (au lieu de collections), qui devrait fonctionner sans erreur.

var Track = Backbone.Model.extend({
    //trackdata
});

var Playlist = Backbone.Model.extend({
    model : Track
});

var Playlists = Backbone.Collection.extend({
    url   : "playlists",
    model : Playlist
});

5voto

Idris Mokhtarzada Points 763

Ressemble à la colonne vertébrale docs maintenant inclure une section sur les modèles imbriqués et collections, très similaire à l'exemple ici: http://backbonejs.org/#FAQ-nested

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X