我正在使用一个 Playlist 对象,该对象具有一些定义自身的属性以及一个 PlaylistItem 集合。
当我从服务器接收数据时,我会在客户端成功方法中获得其 JSON 响应:
success: function (data) {
console.log("JSON data:", data);
playlists = _.map(data, function (playlistConfig) {
return new Playlist(playlistConfig);
});
...
}
在这里,我将我的 JSON 数据转换为 Playlist 对象。每个播放列表对象都是一个 Backbone.Model。
这是我的数据的样子:
下面是 Playlist 构造函数的样子:
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 中编写代码来检查我的项目数组的类型,如果它不是 Backbone.Collection,我可以创建一个新的 Backbone.Collection 并将项目添加到其中,然后用新的数组替换旧数组,但是似乎真的很虚伪。