Я получаю определенный JSON с сервера и хочу иметь возможность добавлять / редактировать / удалять элементы во вложенных массивах (списки вариантов, варианты и столбцы), но я не могу понять, как это сделать с knockout.js.
Я знаю, что мне нужно изменить свойства в этом объекте JSON на наблюдаемые, и я делаю это с помощью подключаемого модуля сопоставления, как показано в разделе «Привязка», и все значения были привязаны правильно, но если я изменю значение в поле ввода, модель / view не обновляется автоматически.
Почему? Я что-то упускаю?
Поддерживаются ли вложенные массивы нативными в knockout.js без необходимости писать собственный код? Как я могу получить из этого JSON полностью работающую модель представления knockout.js?
Я использую текущие доступные версии (нокаут: v2.1.0, плагин сопоставления: v2.3.2).
JSON
{
"VariantList": [
{
"ColumnCount": 1,
"Variants": [
{
"Title": "One column 100%",
"Columns": [
"100 %"
]
}
]
},
{
"ColumnCount": 2,
"Variants": [
{
"Title": "Two columns 50%/50%",
"Columns": [
"50%",
"50%"
]
},
{
"Title": "Two columns 75%/25%",
"Columns": [
"75%",
"25%"
]
}
]
}
]
}
HTML
<div data-bind="foreach: VariantList">
<h2 data-bind="text: ColumnCount"></h2>
<div data-bind="foreach: Variants">
<h3 data-bind="text: Title"></h3>
<table style="width:500px">
<tr>
<!-- ko foreach: Columns -->
<th><input data-bind="value: $data"/></th>
<!-- /ko -->
</tr>
<tr>
<!-- ko foreach: Columns -->
<td data-bind="style: {width:$data}, text:$data"></td>
<!-- /ko -->
</tr>
</table>
</div>
</div>
Привязка
var viewModel;
$(function(){
viewModel = ko.mapping.fromJS(myJson);
ko.applyBindings(viewModel);
});