gpt4 book ai didi

javascript - 使用子集合将 JSON 数据转换为主干模型

转载 作者:行者123 更新时间:2023-11-29 15:44:07 26 4
gpt4 key购买 nike

我正在使用一个 Playlist 对象,它具有一些定义自身的属性以及一个 PlaylistItem 集合。

当我从我的服务器接收数据时,我在我的客户端成功方法中得到它的 JSON 响应:

success: function (data) {
console.log("JSON data:", data);

playlists = _.map(data, function (playlistConfig) {
return new Playlist(playlistConfig);
});

...
}

在这里,我将我的 JSON 数据转换为播放列表对象。每个播放列表对象都是一个 Backbone.Model。

这是我的数据的样子:

enter image description here

下面是播放列表构造器的样子:

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

我的问题:

如果我创建一个具有默认值的播放列表对象,它会使用一个空的 Backbone.Collection 来初始化 PlaylistItem。但是,如果我创建一个具有已定义集合的播放列表对象,我将得到一个基本数组而不是 Backbone.Collection。这是因为我正在使用尚未转换为 Backbone 实体的服务器中的 JSON 数据。该数据扩展到播放列表的默认值并覆盖 Backbone.Collection 实体。

用填充的 Backbone.Collection 进行初始化的正确方法是什么?我可以在 Initializes 中编写代码来检查我的项目数组的类型,如果它不是 Backbone.Collection,我可以创建一个新的 Backbone.Collection 并将项目添加到其中,然后用新数组替换旧数组,但是看起来真的很傻。

最佳答案

不要在默认情况下定义您的 PlalistItems 集合,而是事先定义。然后,像这样在您的播放列表模型上创建一个初始化方法:

var PlaylistItems = Backbone.Collection.extend({
...
});

var Playlist = Backbone.Model.extend({
initialize: function() {
this.set('items', new PlaylistItems(this.items));
},

defaults: function() {
return {
id: null,
userId: null,
title: 'New Playlist',
selected: false,
position: 0,
shuffledItems: [],
history: [],
items: [] // don't define your PlaylistItems Collection here
};
}
});

在这里查看 fiddle :http://jsfiddle.net/georgedyer/r2XKb/(您需要打开控制台才能看到收藏)

关于javascript - 使用子集合将 JSON 数据转换为主干模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14444233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com