2012-10-24 13 views
16

Jak rozumiem, $index jest dostępny wewnątrz wiązania foreach:, podając indeks obiektu ... Mam powiązanie click:, np. click:foo, muszę uzyskać dostęp do $index wewnątrz foo.

Czy istnieje sposób?

Odpowiedz

9

tak,

<input type="button" data-bind="click: function(data, event) { myClickHandler($index, data, event); }"/> 
+0

To smutne, ale prawdziwe. – jessegavin

+0

Zgadzam się z domyślnym handler dla kliknięć, rozmycia i tak dalej powinien przekazać więcej informacji zamiast tylko danych i zdarzenia. Używam niestandardowego wiązania, jeśli powyższe szybkie oszukiwanie nie pasuje do rozwiązania. – ethermal

36

Zamiast hacking wokół niego przez komórki w wiązaniu, wystarczy, aby uzyskać kontekst wiążący. Dopóki masz dostęp do elementu DOM powiązanego z powiązaniem, możesz uzyskać kontekst powiązania i wszystkie jego właściwości za pomocą funkcji ko.contextFor().

Obiekt zdarzenia, który otrzymasz w programie obsługi, zapewnia dostęp do węzła za pośrednictwem właściwości target. Chwyć kontekst za pomocą tego.

var viewModel = { 
    foo: function (data, event) { 
     var context = ko.contextFor(event.target); 
     // do stuff with context.$index() 
    } 
}; 
+3

Ponieważ '$ index' jest obserwowalny, musiałem zrobić' context. $ Index() 'z nawiasami, ponieważ obserwowalne są funkcjami nokautu http://goo.gl/TIGYV1 – andrewcockerham

Powiązane problemy