をknockout.mappingから作成したときに...配列から観察できるが、以下は、私のコードの非常に単純化したバージョンである
をオブジェクトを追加し、削除私のhtmlコード:
<div class="container body-content" data-bind="foreach:base">
<div class="col-md-12" data-bind="with:s">
<div class="col-md-4"><pre data-bind="text:sp"></pre></div>
<div class="col-md-7">
<div class="row" data-bind="foreach: spd">
<input type="text" class="form-control" data-bind="value:value, valueUpdate: 'input'" />
<button data-bind="click: $parent.addval">add</button><button data-bind="click: $parent.removeval">rem</button>
</div>
</div>
</div>
</div>
私のJavascriptコード:
<script src="knockout-3.2.0.js"></script>
<script src="knockout.mapping.js"></script>
<script>
var data = [{
"s": {
"sp": "abc",
"spd": [
{
"value": ""
}
]
},
"type": "xyz",
}];
var AppScope = function() {
function BaseViewModel() {
var self = this;
self.base = ko.observableArray();
self.base(ko.mapping.fromJS(data)());
}
ko.applyBindings(new BaseViewModel());
}();
</script>
'data'配列はサーバーから来ており、データ構造が非常に複雑なので、$ rootは使用できません。 hereのスタイルが答えかもしれませんが、まだ理解できません。
ボタン以外のコードは機能します。私は{value: ""}オブジェクトを 'spd'の配列に追加する方法を理解し、addval関数とremval関数を押すと同じものを削除する方法を理解したいと思います。
は、すべてのヘルプは心から感謝
を感謝しますが私のデータ配列は複数のオブジェクトを持っていますが、データ構造を表示するためにここに1つだけ用意しました。また、サーバーから来る実際のオブジェクトは、はるかに複雑なデータ構造を持っているので、$ rootを使用することはできません。 http://knockoutjs.com/documentation/unobtrusive-event-handling.htmlのようなものを使用する必要がありますが、残念ながらそれを理解することはできません。 – Arnab
今はどうですか?クリックハンドラは '$ parent'(' with'バインディングから来る 's')とデータ項目を' addval'と 'removeval'に渡します。 –