淘汰赛:对象和foreach

时间:2014-01-11 05:17:03

标签: javascript object knockout.js mapping

假设我有以下对象(例如,从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,然后将组名称分配给另一个数组,然后预先取出组名称,然后手动浏览它们 - 但是好像很乱。

什么是最干净,最合乎逻辑的方式?

1 个答案:

答案 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