knockout.js – 在foreach中单击绑定到父函数

前端之家收集整理的这篇文章主要介绍了knockout.js – 在foreach中单击绑定到父函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下html:
  1. <div data-bind="foreach: Contacts">
  2. <a data-bind="click: $parent.Foo($data),text: Name">link</a>
  3. </div>
  4. <button data-bind="click: AddContacts">click</button>

和js代码

  1. var viewmodel = ko.mapping.fromJS({"Selected":null,"Contacts":[]});
  2. viewmodel.AddContacts = function(){
  3. this.Contacts([{"Name":"C1"},{"Name":"C2"}]);
  4. }
  5.  
  6. viewmodel.Foo = function (contact) {
  7. alert(contact.Name);
  8. }
  9.  
  10. ko.applyBindings(viewmodel);

当我点击按钮时,每个联系人都会呼叫Foo.在任何一个链接被点击之前,我根本就不希望这样被调用.

解决方法

正如 nemesv所说.参数是函数参考.所以你正在做的是使用函数的结果作为点击事件.

对您传递的函数调用自动包含该项目的数据,因此您不需要手动传递它:

  1. <div data-bind="foreach: Contacts">
  2. <a data-bind="click: $parent.Foo,text: Name">link</a>
  3. </div>

http://jsfiddle.net/4cUv9/

猜你在找的JavaScript相关文章