我正在使用具有一些定义自身以及PlaylistItem集合的属性的播放列表对象。将JSON数据转换为具有子集合的Backbone模型
当我收到从我的服务器的数据,我得到了我的客户端的成功方法,它的JSON响应:
success: function (data) {
console.log("JSON data:", data);
playlists = _.map(data, function (playlistConfig) {
return new Playlist(playlistConfig);
});
...
}
在这里,我在我的JSON数据转换成播放列表对象。每个播放列表对象都是一个Backbone.Model。
这里是我的数据的外观:
而这里的播放列表构造的样子:
return function(config) {
var playlist = new Playlist(config);
return playlist;
};
var Playlist = Backbone.Model.extend({
defaults: function() {
return {
id: null,
userId: null,
title: 'New Playlist',
selected: false,
position: 0,
shuffledItems: [],
history: [],
items: Backbone.Collection.extend({
model: PlaylistItem
})
};
},
...
}
我的问题:
如果我创建默认播放列表对象,它为PlaylistItem初始化一个空的Backbone.Collection。但是,如果我使用已定义的集合创建播放列表对象,则会获得基本数组而不是Backbone.Collection。这是因为我正在处理尚未转换为Backbone实体的服务器的JSON数据。该数据通过播放列表的默认值进行扩展并覆盖Backbone.Collection实体。
什么是用填充的Backbone.Collection进行初始化的正确方法?我可以在Initializes中编写代码,它检查我的items数组的类型,如果它不是Backbone.Collection,我可以创建一个新的Backbone.Collection并添加项目,然后用新项目替换旧数组,但是看起来真的很嗨。
见我回答这个问题的一种模式,模型中的管理集合属性:http://stackoverflow.com/questions/14315302/backbone-can-an-attribute-contain-a-collection/14315827#14315827 – jevakallio