尝试在Knockout 2中使用新的cleaner event handling以及新的控制流绑定我正在实现一个简单的动态列表,添加和删除字符串。所以我的标记大致如下:
<div data-bind="foreach:myList">
<input data-bind="value: $data" />
<button data-bind="click:$parent.removeFromList">X</button>
</div>
我的viewmodel有一个匹配的删除函数,它模仿a sample from Steve Sanderson。
removeFromList: function(item) {
this.myList.remove(item);
}
现在我希望'this'引用viewmodel和item来引用要删除的数组成员(从event handlers now receive the current model value as their first parameter开始)。但是,'this'似乎也指的是被删除的字符串。因此,当我点击删除时,我得到:
this.myList is undefined
我在http://jsfiddle.net/davidc/rFd7H/创建了一个JSFiddle来说明我的问题。我该如何从列表中删除项目?
答案 0 :(得分:1)
有许多方法可以确保您的处理程序具有正确的“this”值。
在函数中构建视图模型,并对当前bind
示例使用this
:http://jsfiddle.net/rniemeyer/rFd7H/4/。或者,不要在函数中构建视图模型,并使用bind
,例如:http://jsfiddle.net/rniemeyer/rFd7H/10/
在函数中构建视图模型,并使用正确的this
值保存变量,并在处理程序中使用它。示例:http://jsfiddle.net/rniemeyer/rFd7H/5/
绑定到绑定中的正确上下文,例如:data-bind="click: $parent.removeFromList.bind($parent)"
示例:http://jsfiddle.net/rniemeyer/rFd7H/8/
将其称为$parent
对象的匿名函数,如:data-bind="function() { $parent.removeFromList($data); }"
一般情况下,不推荐使用,因为它会使标记变得丑陋/冗长。示例:http://jsfiddle.net/rniemeyer/rFd7H/9/