我有以下结构的淘汰赛模型。它包含一个可观察数组,该数组又包含一个对象。从敲除可观察阵列中删除项目
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