Javascript Backbone.js集合的集合

Javascript Backbone.js集合的集合,javascript,backbone.js,Javascript,Backbone.js,我正在尝试找出如何使用backbone.js创建集合集合。我是个新手。我有如下情况: +---------------+ +------------------+ | Playlists | | Playlist | |---------------| 0..* |------------------| | +-------------->| Name

我正在尝试找出如何使用backbone.js创建集合集合。我是个新手。我有如下情况:

 +---------------+               +------------------+
 | Playlists     |               | Playlist         |
 |---------------|          0..* |------------------|
 |               +-------------->| Name             |
 |               |               |                  |
 |               |               |                  |
 +---------------+               +-------+----------+
                                         |
                                         |
                                         |0..*
                                         v
                                 +------------------+
                                 |  Track           |
                                 |------------------|
                                 | Name             |
                                 | Artist           |
                                 |                  |
                                 +------------------+
在代码中,这类似于:

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
});
但是,我总是在js控制台中收到一个错误,上面说:

 Uncaught TypeError: Object [object Object] has no method '_validate'
当我尝试执行一个触发验证的函数时(如add、fetch等)

如果我将
验证
\u验证
功能添加到任何集合或模型中,则没有区别

我相信这是因为backbone.js不支持集合中的集合。还有别的办法吗

更新:

这就是它现在的样子

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

您可以通过将您的
播放列表
从集合转换为模型来解决问题。如果您仔细想想,一个
播放列表
可能会有其他属性(例如名称),而这些属性在集合中是不可设置的

Playlists
将是
Playlist
模型的集合(而不是集合),这些模型应该可以正常工作

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

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

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

谢谢,似乎工作得很好:D但是我需要一个补充集合,因为一个播放列表可以有多个曲目:var Track=Backbone.Model.extend({//trackdata});var Tracks=Backbone.Collection.extend({model:Track;});var Playlist=Backbone.Model.extend({Model:Tracks});var Playlists=Backbone.Collection.extend({url:“Playlists”,model:Playlist});我希望与服务器同步时一切都能正常工作。我不确定这种方法是否能正常工作-您不能将
主干.Collection
(即
轨道
)的扩展设置为另一个集合的模型。您仍然希望将
曲目
保留为您的
播放列表。模型
,并且您仍然可以使用
曲目
集合来帮助同步。我已更新了问题中的代码。我没有将一个集合设置为另一个集合的模型。我将目录(曲目)设置为模型播放列表(扩展模型)的属性。如果我像你在回答中所说的那样做:
播放列表->模型:曲目
,我只能在播放列表中存储一首曲目,因为播放列表扩展了模型,而模型没有方法创建属性模型的集合。。。还是我错了?现在,我在尝试从服务器获取播放列表时遇到问题。服务器对提取的响应类似于以下内容:
{“name”:“Track Search”,“mObjs”:[{“trackName”:“unknown”,“artistName”:“unknown”}]}
问题是Backbonejs将[]解释为数组而不是集合。因此,模型播放列表的属性“tracks”将不再包含曲目集合,而是一个简单的javascriptArray@krial-这是意料之中的。主干不处理关联。您必须在模型或方法中使用或手动创建
集合。这可能是另一个问题的材料。看起来主干文档现在包含了一个关于嵌套模型和集合的部分,非常类似于这里的示例:首先-很高兴你解决了你的问题。希望这对其他一些人来说是答案,但您的问题来自于错误定义的数据模型-没有“播放列表”(您只有许多播放列表对象,它们被分组到一个位置),您的数据只包含“播放列表”和“曲目”,并且有一个关系1播放列表可以有许多曲目。在您的简单(已解决)示例中,此模式非常清晰可见。