【发布时间】:2012-05-10 10:03:43
【问题描述】:
我正在尝试弄清楚如何使用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'
当我尝试执行触发验证的函数时(如添加、获取、...)
如果我将validate 或_validate 函数添加到任何集合或模型中没有区别。
我相信这是因为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
});
【问题讨论】:
-
看起来主干文档现在包含关于嵌套模型和集合的部分,与此处的示例非常相似:backbonejs.org/#FAQ-nested
-
首先 - 很高兴您解决了问题。希望这将是其他一些人的答案,但是您的问题来自错误定义的数据模型-没有“播放列表”(您只有许多播放列表对象,它们被分组到一个地方),您的数据仅包含“播放列表”和“曲目”,并且有关系 1 播放列表可以有很多曲目。在您的简单(已解决)示例中,此模式非常清晰。