我有以下結構的淘汰賽模型。它包含一個可觀察數組,該數組又包含一個對象。從敲除可觀察陣列中刪除項目
function ViewModel() {
var self = this;
self.newItem = ko.observable({
manufacturer: ko.observable(),
itemnumber: ko.observable(),
itemDescription: ko.observable()
});
self.AllItems = ko.observableArray();
self.addItem = function() {
self.newItem().manufacturer("test");
self.newItem().itemDescription("data");
self.AllItems.push(self.newItem);
};
self.removeItem = function(data) {
self.AllItems.remove(data);
};
}
第一個問題:通過這個劇本,我進入在文本框中一個新itemnumber,然後單擊添加項目有從加入到觀察的陣列文本框中的itemnumber新項目,但是當我更改項目數字並點擊添加它會更改數組內的所有itemnumber。我怎樣纔能有數組內的唯一數據。
第二個問題:我需要從數組中刪除特定的項目,但它不會刪除它。有人可以告訴我如何從可觀測數組中刪除項目,比如說說itemnumber屬性。
<input type="text" data-bind="value: newItem().itemnumber"/>
<div>
Items: <button data-bind="click: addItem">Add Item</button>
</div>
<div>
<table>
<tbody data-bind="template: { name: 'itemTemplate', foreach: AllItems }"></tbody>
</table>
</div>
<script type="text/html" id="itemTemplate">
<tr>
<td>
<input data-bind="value: itemnumber" />
<a href="#" data-bind="click: $parent.removeItem">Remove Item</a>
</td>
</tr>
</script>
我已經創建了這個小提琴快速查看問題。剛開始學習淘汰賽,所以任何幫助表示讚賞。
http://jsfiddle.net/N3JaW/138/
雖然在技術上是正確的,但這不是一個理想的解決方案,因爲視圖模型現在需要了解DOM的知識,這違背了視圖模型的基本原理。我不想根據你的工作創建一個全新的答案,所以我只是在這裏添加一個更好的解決方案是將一個可觀察值存儲在'textBox'中,然後檢索_this observable_的值在'addItem'裏面。瞧!現在,視圖模型獨立於DOM。 – awj
真棒..非常感謝你 – sp9
sp9如果有幫助,你還可以接受答案嗎? :) – Shrabanee