Associazione di un parametro visibile ad una dichiarazione 'o' in Knockout
-
26-10-2019 - |
Domanda
Vorrei associare una proprietà visibile per essere vero quando una delle due condizioni sono vere. Qualcosa di simile al seguente
<tr data-bind="visible: active || $parent.displayDeactive">....</tr>
Il mio codice funziona quando faccio una o gli altri attacchi, ma non quando ho messo il || lì dentro. Non ho trovato alcuna documentazione che dice che posso mettere alcuna logica in questo legame, ma se non posso farlo direttamente qual è il modo est di farlo dal momento che sto legando una proprietà di un modello e un oggetto del $ genitore ViewModel.
Soluzione
Se si utilizza il valore di un osservabile in un'espressione allora avete bisogno di loro riferimento in funzione. Quindi, se active
e displayDeactive
sono osservabili fareste:
data-bind="visible: active() || $parent.displayDeactive()"
Ci sono alcuni modi per spostare al modello di vista, si potrebbe:
- creare un osservabile sul bambino (funzione avrebbe bisogno di essere in grado di fare riferimento al genitore) calcolato
- creare una funzione sul genitore che prende il bambino e restituisce il valore della (binding sono effettuate a livello osservabile calcolato, in modo che il fuoco di nuovo quando qualsiasi osservabile che accede a modifiche)
- creare una funzione sul bambino che porta nel genitore e restituisce il valore (stessa nota come sopra)
Esempio di logica nel legame e utilizzando una funzione sul genitore qui: http://jsfiddle.net/rniemeyer/f6ZgH/
Altri suggerimenti
Aggiungi le parentesi dopo le osservabili, dal momento che li sta valutando.
<input type="checkbox" data-bind="checked:displayDeactive"> Display deactive</input>
<br/><br/>
<table>
<tbody data-bind="foreach: products">
<tr data-bind="visible: active() || $parent.displayDeactive()">
<td><span data-bind="text:name"></span></td>
</tr>
</tbody>
</table>
È possibile trovare il codice completo qui: http://jsfiddle.net/johnpapa/gsnUs/
Si potrebbe utilizzare una proprietà calcolata sulla voce su modelli che valuta l'espressione (appena visto la @RPNiemeyer ha risposto con anche questo ... Ho fatto +1).