【发布时间】:2016-02-21 09:07:17
【问题描述】:
我有一个object,在这个对象中我有项目,其中一个项目是array,其中还包含objects。数据示例如下所示。
我正在使用敲除将此数据绑定到视图,因此我认为我需要实现一个双循环来返回子数组中的对象和对象,以便能够将它们绑定到视图中。
样本数据:
"singers": {
"ijiyt6ih": {
"id": ObjectId('ijiyt6ih'),
"name": "John",
"songs": [
{
"id": ObjectId('okoiu8yi'),
"songName": "Hello There",
"year": "1980"
},
{
"id": ObjectId('sewfd323'),
"songName": "No More",
"year": "1983"
}
]
},
"98usd96w": {
"id": ObjectId('98usd96w'),
"name": "Jack",
"songs": [
{
"id": ObjectId('iew342o3'),
"songName": "Hurry Up",
"year": "1985"
}
]
}
}
我需要找到一种方法来适当地循环遍历它,以便我可以修改返回的数据以使用敲除将其绑定到 viewModel。
这是我的 viewModel 的样子:
singersViewModel = function(data) {
var self = {
singerId: ko.observable(data.id),
singerName: ko.observable(data.name),
songName: ko.observable(...),
songYear: ko.observable(...)
};
我不确定是否必须返回两组不同的数据。
至于循环。我能够循环并返回要在页面上显示的歌手列表,但我无法获取每个歌手中显示的歌曲列表。
到目前为止,这是我的循环:
var self = {},
singer,
tempSingers = [];
self.singers = ko.observableArray([]);
for (singer in singers) {
if (singers.hasOwnProperty(singer)) {
tempSingers.push(new singersViewModel(singers[singer]));
}
}
self.singers(tempSingers);
我尝试在此循环中为歌曲复制相同类型的循环,但使用 hasOwnProperty 会出错,因为歌曲是 array。
【问题讨论】:
-
什么是
ObjectId()? -
@JotaBe 我正在显示数据库中的数据。
标签: javascript arrays knockout.js mapping