Отображать вложенные массивы в knockout.js

У меня есть объект json, возвращенный через jquery ajax из службы asmx. Когда я пытаюсь отобразить его в таблице, ничего не отображается. Что я могу делать не так?

Заранее спасибо.

Возвращенный JSON...

[{\"id\":1488,\"name\":\"Baby Books\",
  \"categories\":
  [{\"id\":152,\"name\":\"Activity Books\",\"value\":\"Ignore\"},
   {\"id\":167,\"name\":\"Bedtime and Dreams\",\"value\":\"Ignore\"}]},
 {\"id\":1489,\"name\":\"Story Books\",
  \"categories\":
  [{\"id\":1506,\"name\":\"Games - Floor Puzzles\",\"value\":\"Ignore\"}]}]

код отображения js (где gorupJson возвращается из вызова) ...

var viewModel = {
   groups: ko.observableArray([]), 
};
viewModel.groups(groupJson)
ko.applyBindings(viewModel);

содержание страницы...

<table width="100%" >
 <tbody data-bind="foreach: groups" style="width:100%">
   <tr>
    <td data-bind="text: name"></td>
    <td>
     <ul data-bind="foreach: categories">
      <li>
       <a><span  data-bind="text: name"></span></a>
      </li>
     </ul>
  </tbody>
</table>

3 ответа

Ваш JSON не конвертируется автоматически в коллекцию ко. Таким образом, вам нужно применить сопоставление к этому преобразованию, вероятно, так: ko.mapping.fromJS(data). Когда вы это сделаете, ваши поля id, name, value станут в ko.observable

Если вы хотите узнать больше о подключаемом плагине в нокауте, взгляните на http://knockoutjs.com/documentation/plugins-mapping.html

Во-первых, ваш JSON недействителен. Проверьте скрипку: http://jsfiddle.net/YNdmh/

 var groupJson =  [{"id":1488,"name":"Baby Books","categories":
   [{"id":152,"name":"Activity Books","value":"Ignore"},
   {"id":167,"name":"Bedtime and Dreams","value":"Ignore"}]},
   {"id":1489,"name":"Story Books","categories":
   [{"id":1506,"name":"Games - Floor Puzzles","value":"Ignore"}]}]

Вам не хватает закрывающих тегов для <td> а также <tr>

Косые черты в JSON должны идти также.

http://jsfiddle.net/yhBvr/

Другие вопросы по тегам