Backbone.js Collection of Collections

backbone.js, javascript

Solution

You'd solve your problem by turning your `Playlist` from a collection into a model. If you think about it, a `Playlist` would probably have other attributes anyway (e.g. name) that wouldn't be settable on a collection.

`Playlists` would then be a collection of `Playlist` models (instead of collections), which should work without error.

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

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

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

Problem

I'm trying to figure out how to make a Collection of collections with backbone.js. I'm pretty new to backbone. I have something like the following situation: ``` +---------------+ +------------------+ | Playlists | | Playlist | |---------------| 0..* |------------------| | +-------------->| Name | | | | | | | | | +---------------+ +-------+----------+ | | |0..* v +------------------+ | Track | |------------------| | Name | | Artist | | | +------------------+ ``` In code this looks similar to this: ``` 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, because there is no model attribute for collections :S }); ``` However I always receive an error in the js console saying: ``` Uncaught TypeError: Object [object Object] has no method '_validate' ``` when I try to execute a function that triggers the validate (like add, fetch, ...) It makes no difference if i add the `validate` or `_validate` function to any of the collections or models. I believe this is because backbone.js doesn't support collections in collections. Is there another way that works? UPDATE: This is how it looks right now ``` 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 }); ```

Original source