假设我有以下对象(例如,从JSON文件中提取):
{
"groups": [
{
"name":"groupa",
"shirts":[
{
"name":"foo1", "color": "blue", "size": "small"
},
{
"name":"foo2", "color": "green", "size": "large"
},
{
"name":"foo3", "color": "red", "size": "medium"
}
]
},
{
"name":"groupb",
"shirts":[
{
"name":"foo1", "color": "blue", "size": "x-large"
},
{
"name":"foo2", "color": "purple", "size": "large"
},
{
"name":"foo3", "color": "pink", "size": "xx-large"
}
]
}
]
}
我理解如何使用observableArray
s,它包含来自单个对象的正确映射数据。但是,如果我需要observableArray
来包含来自多个对象的数据呢?
输出可能类似于以下内容:
<div>
<h2>groupa</h2>
<h3>foo1 - large blue</h3>
<h3>foo2 - small red</h3>
<hr />
<h2>groupb</h2>
<h3>bar1 - medium purple</h3>
<h3>bar2 - x-large white</h3>
<hr />
<h2>groupc</h2>
<h3>foobar1 - large black</h3>
<h3>foobar2 - small green</h3>
</div>
我不明白的是,如何使用一个可观察数组创建它?
我尝试将每个group
分配给他们自己的observableArray
,然后将组名称分配给另一个数组,然后预先取出组名称,然后手动浏览它们 - 但是好像很乱。
什么是最干净,最合乎逻辑的方式?
答案 0 :(得分:0)
所以有一种明显的方法可以做到这一点,只需将observableArray
映射到包含衬衫的每个组。像这样:
function shirt_group_assign(item) {
this.name = item.name;
this.shirts = ko.observableArray([]);
shirts_mapped = $.map(item.shirts, function(item) {
return new shirt_assign(item);
});
this.shirts = shirts_mapped;
}
有一个有效的例子here。