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

时间:2014-07-03 14:49:39

标签: javascript knockout.js binding

我无法理解为什么以下代码在Knockout中不起作用。

实施例

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

理论上,以下代码应该有效,传递的参数'hey'应该由this.path.to.method函数接收。

但是,它没有,我得到类似ViewModel实例的东西,然后是事件对象。

为什么?

我想知道它到底是做什么的,要知道我是否可以使用.bind或者我总是被迫将它包装在一个函数(){/ *任何调用这里... * /}在knockout绑定中点击”。

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/

是的有效......

... data-bind =“click:function(){path.to.method('hey',$ data);}”

然而,它的可读性低于另一个。

.bind 来电,我不明白什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

正确的语法是

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

Demo

请参阅knockout doc's example

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

检查js doc

  

语法

     

fun.bind(thisArg [,arg1 [,arg2 [,...]]])

     

参数

     

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