Javascript 具有多个参数的敲除单击绑定

Javascript 具有多个参数的敲除单击绑定,javascript,knockout.js,binding,Javascript,Knockout.js,Binding,我对参数如何从HTML传递到函数中感到困惑 <tbody data-bind="foreach: colorItem"> <tr> <td data-bind="click: $root.colorTest.bind($data, 'red', 'blue'), text: 'color'"></td> </tr> </tbody> public colorTest(data, param

我对参数如何从HTML传递到函数中感到困惑

<tbody data-bind="foreach: colorItem">
    <tr>
        <td data-bind="click: $root.colorTest.bind($data, 'red', 'blue'), text: 'color'"></td>
    </tr>
</tbody>


public colorTest(data, param1, param2) {   
    if (param1 == 'red'){
        // do something
    }

公共颜色测试(数据,参数1,参数2){
如果(参数1==“红色”){
//做点什么
}
在colorTest函数中,我希望'data'保存$data,'param1'保存值'red','param2'保存值'blue'

但是,$data总是被传递到最后一个参数字段中,因此在colorTest函数中,data='red',param1='blue',param2='$data'


这就是knockout的工作原理吗?$data始终作为最后一个参数传递到函数中,即使它被放在HTML数据绑定的第一位?

绑定函数不是knockout的一部分,它是一个javascript函数,并且第一个参数始终应该是“this”因此,只有第一个参数之后的参数才能作为参数传入

您应该按如下方式修改绑定:

click: $root.colorTest.bind($root, $data, 'red', 'blue')

Knockout使用$data和$event调用函数,它们在绑定参数之后传递。

让viewmodel中的函数返回一个函数

ko.applyBindings({
颜色测试:函数(参数1、参数2){
返回函数(){
log('param1是'+param1+',param2是'+param2');
}
}
});


Color(点击我!)
谢谢。这很有效。但是我需要显式传递$data吗?正如您所说,Knockout会在绑定参数后自动发送$data和$event(我看到了)。那么它实际上发送$data两次了吗?使用“…colorTest.bind($root,'red','blue')会更好吗然后使用my函数中的第三个参数捕获$data,使其看起来像“public colorTest(param1,param2,data)”?如何在colorTest函数中访问$data的属性?它是$(data)吗.Name?例如???@Soya它是作为函数参数传入的,因此它的名称是您在设置函数时想要的任何名称。如果您使用2个参数绑定并使用
函数(x,y,z){console.log(z.Name);}