11

私は次の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 が呼び出されます。リンクのいずれかがクリックされるまで、これがまったく呼び出されるとは思っていませんでした。

4

2 に答える 2

18

nemesvが言ったように。パラメータは関数参照です。つまり、あなたが行っていたのは、関数の結果をクリックイベントとして使用することでした。

渡す関数の呼び出しには、そのアイテムのデータが自動的に含まれるため、手動で渡す必要はありません。

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

http://jsfiddle.net/4cUv9/

于 2012-12-10T16:19:49.977 に答える
10

バインディングのclickパラメーターは関数参照です。したがって、呼び出しを無名関数にラップする必要があります。

<div data-bind="foreach: Contacts">
   <a data-bind="click: function() { $parent.Foo($data); }, text: Name">link</a>
</div>

clickしたがって、バインディングに追加の引数を渡したい場合は、それをラップして関数を作成する必要があります。クリック ドキュメントのサンプルも参照してください。

そこで関数<button data-bind="click: AddContacts">を直接参照しているため、式はAddContacts機能しています。

于 2012-12-10T16:15:41.603 に答える