使用Knockout点击绑定处理程序和javascript绑定(ECMAScript 5)

Using Knockout click binding handler and javascript bind (ECMAScript 5)

本文关键字:绑定 javascript ECMAScript 程序 Knockout 处理 使用      更新时间:2023-09-26

我无法理解为什么下面的代码不能在Knockout中工作。

在javascript中,myFunction .bind()应该返回一个函数,包含对FUNCTION1的调用和提供的参数。我说的对吗?

理论上,下面的代码应该可以工作,传入的参数'hey'应该被this.path.to.method函数接收。

然而,它没有,我得到了类似ViewModel实例的东西,后面跟着事件对象。

为什么?

我想知道它到底做了什么,以了解我是否可以使用。bind或我是否总是被迫将它包装在函数(){/*这里的任何调用…*/}在knockout绑定'click'中。

JSFiddle链接:http://jsfiddle.net/darknessm0404/X2yd7/

<a data-bind="click: path.to.method.bind('hey', $data)">
    Why p1 and p2 do not receive the good parameters with arguments like ['hey', $data] when click happens?
</a>
function VM(){
    // In my model, I am namespacing things this way:
    this.path = {
        to: {
            method: function(p1, p2) {
                console.log(((p1 === 'hey')?'First parameter is as expected':'First parameter is NOT as expected'));
                debugger;
            }
        }
    }
}
ko.applyBindings(new VM());

JSFiddle链接:http://jsfiddle.net/darknessm0404/X2yd7/

是的,它工作…

…with data-bind="click: function(){path.to。方法("嘿",美元数据);}"

但是,它比另一个可读性差。

我不明白的是。结合电话吗?

谢谢你的帮助。

正确的语法是

<a data-bind="click: path.to.method.bind($data, 'hey')">

演示

参见knockout doc的示例。

实际上,bind的第一个参数将作为函数中的this值传递。
所以函数中的第一个参数是bind 中的第二个参数。

检查js文档:

语法

乐趣。bind(thisArg[, arg1[, arg2[,…]]])

参数

thisArg作为this参数传递给调用绑定函数时的目标函数。值为如果使用new操作符构造绑定函数,则忽略。