gpt4 book ai didi

knockout.js - 从 child 的根上触发方法时的上下文

转载 作者:行者123 更新时间:2023-12-04 03:23:52 26 4
gpt4 key购买 nike

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

<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/

问题是 remove 方法中 this 的上下文是触发点击事件的 subview 模型

我还没有找到我喜欢的解决方案,您可以在构造函数中添加一个自变量并使用它而不是“this”,但它的代码更干净,并且 OO 可以使用“this”关键字

fiddle :http://jsfiddle.net/Qn2CM/

您也可以创建一个代理函数委托(delegate),但它的代码仍然不是很干净

fiddle :http://jsfiddle.net/gYhMr/

我想告诉 ko 以某种方式将 this 的上下文设置为正确的正确范围(在本例中为 $root)是否可能?

最佳答案

如您所见,点击/事件绑定(bind)在当前数据的上下文中运行。

有几个选项可以确保您的函数在正确的上下文中运行:

  • 将正确的 this 设置为像 self 这样的变量,并在您的处理程序中使用它(如您所提到的)
  • 在您的 View 模型中使用类似$.proxy.bind 的东西来确保this 是正确的(如您所提到的)
  • data-bind="click: $root.remove.bind($root)"
  • 一样在线绑定(bind)函数
  • 使用(丑陋的)匿名函数,如 data-bind="click: function() { $root.remove($data); }"

关于knockout.js - 从 child 的根上触发方法时的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10737494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com