我有这个非常简单的测试视图
<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>
Fiddle: http://jsfiddle.net/6PP5m/ http://jsfiddle.net/6PP5m/
问题在于,remove 方法中 this 的上下文是触发单击事件的子视图模型
我还没有找到我喜欢的解决方案,您可以在构造函数中添加一个 self 变量并使用它代替“this”,但它的代码更干净,并且 OO 使用“this”关键字
Fiddle: http://jsfiddle.net/Qn2CM/ http://jsfiddle.net/Qn2CM/
您还可以创建一个代理函数委托,但它的代码仍然不是很干净
Fiddle: http://jsfiddle.net/gYhMr/ http://jsfiddle.net/gYhMr/
我想要的是告诉 ko 以某种方式将其上下文设置为正确的正确范围(在本例中为 $root)是否可能?
单击/事件绑定在您发现的当前数据的上下文中运行。
有几个选项可以确保您的函数在正确的上下文中运行:
- 设置正确的
this
到像这样的变量self
并在您的处理程序中使用它(正如您所提到的)
- 使用类似的东西
$.proxy
or .bind
在您的视图模型中以确保this
是正确的(正如你所提到的)
- 将函数绑定为内联
data-bind="click: $root.remove.bind($root)"
- 使用(丑陋的)匿名函数,例如
data-bind="click: function() { $root.remove($data); }"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)