Javascript Backbone.js集合的集合
我正在尝试找出如何使用backbone.js创建集合集合。我是个新手。我有如下情况:Javascript Backbone.js集合的集合,javascript,backbone.js,Javascript,Backbone.js,我正在尝试找出如何使用backbone.js创建集合集合。我是个新手。我有如下情况: +---------------+ +------------------+ | Playlists | | Playlist | |---------------| 0..* |------------------| | +-------------->| Name
+---------------+ +------------------+
| 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播放列表可以有许多曲目。在您的简单(已解决)示例中,此模式非常清晰可见。