2013-01-06 1 views
8

Ho un problema con Knockout.js. Voglio passare il nome utente a una funzione e visualizzarlo in stato di avviso. Sta succedendo qualcosa di strano. Ricevo avvisi ogni volta che aggiorno la pagina con nomi utente corretti, ma dopo aver fatto clic su di essa non ottengo alcuna risposta. Cosa c'è di sbagliato qui? Qui è il mio codice:Knockout.js - parametri di passaggio

<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> 

e

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

risposta

28

Il click vincolante accetta una funzione di callback da chiamare quando il controllo viene cliccato.

Tuttavia, nel tuo esempio, stai chiamando la funzione. Quindi, ciò che accade è ogni volta che la pagina viene caricata, i collegamenti vengono caricati e la funzione viene invocata come è stata scritta. È necessario avvolgerlo in una funzione in modo che non venga chiamato così.

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

Grazie mille! Funziona! –

+0

ha avuto lo stesso problema, questa soluzione funziona alla grande, grazie – Pawel

11

Knockout passa l'oggetto giusto al gestore eventi. Basta fare in questo modo:

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

e

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

Questa dovrebbe essere la risposta corretta. – USSliberty

+2

Mai in grado di farlo. Ha sempre ottenuto l'oggetto indefinito. –