我有这个非常简单的测试视图
<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>
Run Code Online (Sandbox Code Playgroud)
小提琴:http://jsfiddle.net/6PP5m/
问题是remove方法中的上下文是触发click事件的子视图模型
我没有找到我喜欢的解决方案,你可以在构造函数中添加一个自变量并使用它而不是"this",但它更干净的代码和OO使用"this"关键字
小提琴:http://jsfiddle.net/Qn2CM/
您还可以创建代理函数委托,但它仍然不是很干净的代码
小提琴:http://jsfiddle.net/gYhMr/
我想要的是告诉ko以某种方式将其上下文设置为正确的范围(在这种情况下为$ root)是否可能?
单击/事件绑定在您找到的当前数据的上下文中运行.
有几个选项可确保您的函数以正确的上下文运行:
this设置为变量,self并在您的处理程序中使用它(如您所述)$.proxy或.bind在您的视图模型,以确保this是正确的(如你所提到的)data-bind="click: $root.remove.bind($root)"data-bind="click: function() { $root.remove($data); }" | 归档时间: |
|
| 查看次数: |
272 次 |
| 最近记录: |