我有以下html:
<div data-bind="foreach: Contacts">
<a data-bind="click: $parent.Foo($data), text: Name">link</a>
</div>
<button data-bind="click: AddContacts">click</button>
和js代码:
var viewModel = ko.mapping.fromJS({"Selected":null,"Contacts":[]});
viewModel.AddContacts = function(){
this.Contacts([{"Name":"C1"},{"Name":"C2"}]);
}
viewModel.Foo = function (contact) {
alert(contact.Name);
}
ko.applyBindings(viewModel);
当我点击按钮时,会为每个联系人调用Foo。在点击任何链接之前,我根本没想到会调用它。
答案 0 :(得分:17)
正如nemesv所说。该参数是函数引用。所以你正在做的是使用函数的结果作为点击事件。
您传递的函数调用将自动包含该项目的数据,因此您无需手动传递:
<div data-bind="foreach: Contacts">
<a data-bind="click: $parent.Foo, text: Name">link</a>
</div>
答案 1 :(得分:8)
click
绑定参数是函数引用。所以你需要将你的调用包装成一个匿名函数:
<div data-bind="foreach: Contacts">
<a data-bind="click: function() { $parent.Foo($data); }, text: Name">link</a>
</div>
因此,当您想要将其他参数传递到click
绑定时,需要将其包装以生成函数。另请参阅click documentation
<button data-bind="click: AddContacts">
表达式正常工作,因为您直接在那里引用AddContacts
函数。