Ich habe folgende html:klicken Sie auf das übergeordnete Funktion in foreach Bindung
<div data-bind="foreach: Contacts">
<a data-bind="click: $parent.Foo($data), text: Name">link</a>
</div>
<button data-bind="click: AddContacts">click</button>
und js Code:
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);
Wenn ich auf die Schaltfläche klicken die Foo für jeden Kontakt genannt wird. Ich habe nicht erwartet, dass dies überhaupt aufgerufen wird, bis ein Link geklickt wird.
ACHTUNG: mit dem Code oben, in Foo(), die Variable "this" wird * nicht * das viewModel sein. Dieses Beispiel funktioniert, weil "this" in Foo nicht verwendet wird. Um "this" zu korrigieren, würden Sie "click: $ parent.Foo.bind ($ parent)" machen. Siehe http://jsfiddle.net/4cUv9/ – pettys