Отображать вложенные массивы в 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 должны идти также.