我从服务器获取特定的 JSON,并希望能够在嵌套数组(变体列表、变体和列)中添加/编辑/删除项目,但我不知道如何使用 knockout.js 来做到这一点。
我知道我需要将该 JSON 对象中的属性更改为 observables,并使用映射插件(如“绑定”下所示)进行此操作,并且所有值都已正确绑定 - 但如果我更改输入字段中的值,则模型/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);
});