これは誰かにとって簡単な答えになると確信しています。私は次のViewModelを持っています:
@{
var initialData = new JavaScriptSerializer().Serialize(Model);
}
var data = @Html.Raw(initialData);
function ViewModel(data) {
var self = this;
self.Name = ko.observable(data.Name);
self.Items = ko.observableArray(data.Items);
self.addItem = function() { self.Items.push(""); };
self.removeItem = function(data) { self.Items.remove(data); }
}
$(document).ready(function() {ko.applyBindings(new ViewModel(data)); });
そして次のビュー:
<div>
Name: <span data-bind="text: Name"></span>
</div>
<div>
Items: <button data-bind="click: addItem">Add Item</button>
</div>
<div>
<table>
<tbody data-bind="template: { name: 'itemTemplate', foreach: Items }"></tbody>
</table>
</div>
<script type="text/html" id="itemTemplate">
<tr>
<td>
<input data-bind="value: $data" />
<a href="#" data-bind="click: function() {$parent.removeItem($data)}">Remove Item</a>
</td>
</tr>
</script>
を除いて、すべてが正しく機能しているようですremoveItem
。新しい行が追加され、空の新しい行で[アイテムの削除]をクリックすると、新しい行がすべて削除されます。私はこれを機能させるためにたくさんのノックアウトチュートリアルを見てきました、そして私の方法は有効な試みのようです、しかし明らかに...私は何かを逃しているに違いありません。助言がありますか?