2014-01-11 3 views
0

Скажем, если я следующий объект (например, тянули из файла 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 с, которые содержат правильно отображаются данные из одного объекта , Но что, если мне нужен 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 s своим собственным observableArray, а затем имена групп в другой массив, а затем выделить имена групп, а затем вручную просмотреть их, но это кажется беспорядочным.

Какой самый чистый, самый логичный способ?

+2

Ваша структура данных очень странная. Почему «рубашки» не являются массивом? Почему каждая группа не является массивом? – Tyrsius

+0

Я обновил структуру JSON (теперь только две группы, исключительно для визуального размера). Первоначально он был структурирован таким образом, чтобы я мог сортировать на основе ключа объекта, а не погружаться в следующий уровень. Дайте мне знать, если это упростит работу с нокаутом (хотя, я в этом сомневаюсь). Благодаря! – Ojame

ответ

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.

Смежные вопросы