Knockout - 使用其他参数绑定事件

时间:2014-01-31 01:40:43

标签: knockout.js

我有一个组成导航菜单的链接列表。我正在尝试将tap事件绑定到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 param包含菜单项的文本 menuText参数具有菜单项的值
menuValue param有淘汰“$ data”对象。

有人可以告诉我如何正确传递参数。

感谢。

2 个答案:

答案 0 :(得分:0)

bind()函数的第一个参数是this。因此menuText最终显示为menuIndex参数,依此类推。在其位置传递其他内容(例如,视图模型)。

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

答案 1 :(得分:0)

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)