2013-01-06 12 views
8

Mam problem z Knockout.js. Chcę przekazać nazwę użytkownika do funkcji i wyświetlić ją w stanie alarmu. Dzieje się coś dziwnego. Otrzymuję alerty za każdym razem, gdy odświeżam stronę z poprawnymi nazwami użytkowników, ale po jej kliknięciu nie otrzymuję żadnej odpowiedzi. Co jest nie tak? Tu jest mój kodu:Knockout.js - parametry przekazujące

<ul data-bind="foreach: contacts"> 
    <li class="user-box"><span class="user-box-name" data-bind="text: username, click: $root.userClick(username)"></span> 
    </li> 
</ul> 

i

self.userClick = function (x) { 
    alert(x); 
} 

Odpowiedz

28

click wiązanie akceptuje funkcją oddzwaniania na miano gdy kontrola kliknięciu.

Jednak w twoim przykładzie wywołujesz tę funkcję. Co się dzieje, to za każdym razem, gdy strona jest ładowana, wiązania są ładowane, a twoja funkcja jest wywoływana, tak jak jest napisana. Musisz zawinąć to w funkcję, aby nie było tak nazywane.

<span class="user-box-name" 
     data-bind="text: username, click: function() { $root.userClick(username); }"> 
</span> 
+0

Dziękuję bardzo! To działa! –

+0

miał ten sam problem, to rozwiązanie działa świetnie, dzięki – Pawel

11

Knockout przekazuje właściwy obiekt do obsługi zdarzenia. Po prostu zrób to tak:

<ul data-bind="foreach: contacts"> 
    <li class="user-box"> 
    <span 
     class="user-box-name" 
     data-bind="text: username, click: $root.userClick" 
    ></span> 
    </li> 
</ul> 

i

self.userClick: function (obj, event) { 
    alert(obj.username); 
} 
+0

Ten powinien być poprawną odpowiedzią. – USSliberty

+2

Nigdy nie można tego zrobić. Zawsze mam niezdefiniowany obiekt. –

Powiązane problemy