我有这个非常简单的测试视图
<button data-bind="click: add">Add</button>
<table data-bind="foreach: items">
<tr>
<td data-bind="text: name"></td>
<td><button data-bind="click: $root.remove">Remove</button></td>
<tr>
</table>
小提琴:http://jsfiddle.net/6PP5m/
问题是remove方法中的上下文是触发click事件的子视图模型
我没有找到我喜欢的解决方案,你可以在构造函数中添加一个自变量并使用它而不是“this”,但是它更干净的代码和OO使用“this”关键字
小提琴:http://jsfiddle.net/Qn2CM/
你也可以创建一个代理函数委托,但它仍然不是很干净的代码
小提琴:http://jsfiddle.net/gYhMr/
我想要告诉ko以某种方式将其上下文设置为正确的范围(在这种情况下为$ root)是否可能?
答案 0 :(得分:6)
点击/事件绑定在您找到的当前数据的上下文中运行。
有几个选项可以确保您的函数以正确的上下文运行:
this
设置为self
之类的变量,并在您的处理程序中使用它(如您所述)$.proxy
或.bind
之类的内容,以确保this
正确(如您所述)data-bind="click: $root.remove.bind($root)"