【问题标题】:Knockout - binding an event with additional parameters淘汰赛 - 使用附加参数绑定事件
【发布时间】:2014-01-31 11:16:35
【问题描述】:

我有一个组成导航菜单的链接列表。我正在尝试将点击事件绑定到 a 标签。

这是html

<a data-bind="event: { tap: $parent.menuClick.bind($index, $data.menuText, $data.menuValue) }">

这是javascript

this.menuClick = function (menuIndex, menuText, menuValue) {
    ....
}

这不起作用。当我在 menuClick 函数中放置一个断点时,我看到参数值完全搞砸了。

menuInde​​x 参数包含菜单项的文本。
menuText 参数具有菜单项的值
menuValue 参数具有剔除“$data”对象。

谁能告诉我如何正确传递参数。

谢谢。

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    bind 的第一个参数是在被调用函数 (MDN) 中用作this 的值。所以你可能希望绑定是这样的:

    event: { tap: $parent.menuClick.bind($parent.menuClick, $index, $data.menuText, $data.menuValue) }
    

    或者,您可能对Knockout.Punches plugin 感兴趣,它允许您提供为事件运行的表达式:

    on.tap: $parent.menuClick($index, $data.menuText, $data.menuValue)
    

    【讨论】:

      【解决方案2】:

      bind() 函数的第一个参数是this。所以menuText 最终以menuIndex 参数的形式出现,依此类推。在它的位置传递其他东西(例如,视图模型)。

      <a data-bind="event: {
          tap: $parent.menuClick.bind($root, $index, $data.menuText, $data.menuValue)
      }">...</a>
      

      【讨论】:

      • "不管怎样都无所谓" 这是不正确的。 bind 调用中指定的值始终具有优先权,并且在使用 callapply 时不会被覆盖(就像 Knockout 一样)。
      • 你说得对,我误解了我在测试中看到的内容。
      猜你喜欢
      • 1970-01-01
      • 2013-09-10
      • 2022-10-17
      • 2013-02-04
      • 2013-08-17
      • 2013-01-24
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      相关资源
      最近更新 更多