我是 Knockout 的新手,并且仍在学习它。
我有一个简单的页面,因此用户可以添加和删除项目。“删除”功能(名为“deleteItem”)适用于版本 1 代码,但不适用于版本 2 代码。请帮助我知道背后的原因。提前致谢。
顺便说一句,版本 2 的代码来自链接http://knockoutjs.com/documentation/foreach-binding.html#note_5_postprocessing_or_animating_the_generated_dom_elements底部附近的注释 7
版本 1 的代码来自同一链接的示例 2。
我的代码的详细信息:
2个版本的区别是:
在版本 1 中,属性“myItems”是具有“名称”属性的对象数组。
在版本 2 中,属性“myItems”是一个没有任何属性的元素数组。这些数组元素只是文字字符串。
版本 1代码:“删除”功能(名为“deleteItem”)正在工作
<div>
<ul data-bind="foreach: {data: myItems}">
<li>
<span data-bind="text: $data.name"></span> <a href="#" data-bind="click : $parent.deleteItem"
>Delete</a>
</li>
</ul>
<button data-bind="click: addItem">Add</button>
</div
<script type="text/javascript">
$(function () {
function ViewModel() {
var self = this;
self.myItems = ko.observableArray([{ name: 'A' }, { name: 'B' }, { name: 'C' } ]); /*********/
self.addItem = function () { self.myItems.push({ name: 'New item at ' + new Date() }); }
self.deleteItem = function () {
self.myItems.remove(this);
};
}
ko.applyBindings(new ViewModel());
});
</script>
版本 2:“删除”功能(名为“deleteItem”)不起作用
<div>
<ul data-bind="foreach: myItems">
<li>
<span data-bind="text: $data"></span> <a href="#" data-bind="click : $parent.deleteItem"
>Delete</a>
</li>
</ul>
<button data-bind="click: addItem">Add</button>
</div>
<script type="text/javascript">
$(function () {
function ViewModel() {
var self = this;
self.myItems = ko.observableArray(['A', 'B', 'C']); /*********/
self.addItem = function () { self.myItems.push('item added at ' + new Date()); };
self.deleteItem = function () {
self.myItems.remove(this);
};
}
ko.applyBindings(new ViewModel());
});
</script>