サーバーから特定の 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);
});