我对如何将参数从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数据绑定中?
答案 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>