这触发时,方法对从子根上下文(Context of this when triggering met

2019-09-17 11:37发布

我有这个非常简单的测试图

<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方法的上下文是触发的单击事件子视图模型

我还没有找到一个解决方案,我很喜欢,你可以在构造器并使用它的“本”,但其更干净的代码和面向对象使用“本”关键字添加自变量

小提琴: http://jsfiddle.net/Qn2CM/

您还可以创建一个代理功能的代表,但它仍然不是很干净的代码

小提琴: http://jsfiddle.net/gYhMr/

我想就是告诉KO莫名其妙地这样的背景设置为正确的正确的范围($根在这种情况下),这可能吗?

Answer 1:

点击/事件绑定在当前数据的上下文中运行,你已经找到。

有几个选项,以确保您的功能与正确的上下文中运行:

  • 设置正确的this像一个变量self ,并在你的处理器使用它(正如你所提到的)
  • 使用类似$.proxy.bind在您的视图模式,确保this是正确的(如你所提到的)
  • 在结合线等的功能data-bind="click: $root.remove.bind($root)"
  • 使用像一个(丑陋)匿名函数data-bind="click: function() { $root.remove($data); }"


文章来源: Context of this when triggering method on root from child
标签: knockout.js