我相信這對於某人來說是一個簡單的答案。我有以下視圖模型:從observableArray刪除 - knockoutjs
@{
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
正常工作。添加新行後,在空的新行上單擊「刪除項目」時,所有新行都將隨之刪除。我已經看過大量的淘汰賽教程,試圖讓這個工作,我的方法似乎是一個有效的嘗試,但顯然......我一定是失去了一些東西。有什麼建議麼?
我真的很喜歡你在jsfiddle上的方法,但我沒有提到我需要將這個模型發回服務器。這意味着'Items'需要是一個字符串[]。所以我猜這意味着我應該去$ index路線,對嗎? –
不一定。有幾種方法可以確保JSON輸出恢復到您想要的狀態。我會回答一些信息。 –
如果可以的話,我會給你兩個ups。非常有用的答案。 –