2014-11-25 9 views
5

Quindi sto cercando di aggiungere una classe a un elemento utilizzando Knockout.js in base al fatto che una casella di controllo figlio sia selezionata o meno. Per fare ciò, sto cercando di passare this come argomento alla mia funzione. Attualmente, la mia struttura DOM ridotta è la seguente:Come posso passare l'elemento corrente a una funzione Javascript in un binding Knockout.js?

<tr data-bind="css: { selected: isRowChecked(this) }"> 
    <td><label><input type="checkbox"></label></td> 
</tr> 

Una mia funzione isRowChecked è questo (sto usando jQuery per individuare l'ingresso):

function isRowChecked(elem) { 
    var checkbox = $(elem).find('input[type="checkbox"]'); 
    return checkbox.checked; 
} 

Eppure, se mi console.logelem tutto quello che get è l'oggetto della finestra globale.

Non è possibile utilizzare jQuery per risolvere completamente questo problema poiché il progetto a cui sto lavorando utilizza già il knockout quasi esclusivamente. Qualche idea?

+1

prega di non utilizzare jQuery nelle vostre ViewModels KO! Dovresti usare le osservabili e l'associazione verificata per tenere traccia quando la casella è selezionata: http://jsfiddle.net/eqoryb6v/ – nemesv

+0

@nemesv, okay, è utile, ma ho più righe, ognuna con una casella di controllo. Usando il tuo metodo, quando seleziono una casella di controllo, * all * le righe e le caselle di controllo sono evidenziate. http://jsfiddle.net/eqoryb6v/1/ – ReactingToAngularVues

risposta

10

Si dovrebbe essere in grado di ottenere ciò passando la variabile di contesto vincolante speciale $ elemento. È l'ultima variabile discussed here.

$ elemento

Questo è l'oggetto DOM elemento (elementi virtuali, sarà l'oggetto DOM commenti) della corrente di legame. Questo può essere utile se un binding deve accedere ad un attributo dell'elemento corrente. Esempio:

<div id="item1" data-bind="text: $element.id"></div>

Nel tuo caso, che sarebbe simile a questa:

<tr data-bind="css: { selected: isRowChecked($element) }"> 
    <td><label><input type="checkbox"></label></td> 
</tr> 
+0

Superbo. Grazie! – ReactingToAngularVues

Problemi correlati