Knockout单击具有多个参数的绑定

时间:2017-03-16 18:15:04

标签: 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, param1, param2) {   
    if (param1 == 'red'){
        // do something
    }

在colorTest函数中,我希望'data'保存$ data,'param1'保持值'red'和'param2'保持值'blue'。

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

这是淘汰赛如何运作的? $ data总是作为最后一个参数传递给函数,即使它首先放在HTML数据绑定中?

2 个答案:

答案 0 :(得分:3)

.bind函数不是淘汰赛的一部分,它是一个javascript函数,第一个参数总是应该是“this”上下文。所以只有第一个参数后面的参数作为参数传入。 Reference

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

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

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

答案 1 :(得分:0)

在视图模型中具有该函数会返回一个函数。

ko.applyBindings({
  colorTest: function(param1, param2) {
    return function() {
      console.log('param1 is ' + param1 + ' and param2 is ' + param2);
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

<button data-bind="click: colorTest('red', 'blue')">Color (click me!)</button>