2012-01-10 11 views
26

Vorrei associare una proprietà visibile a true quando una delle due condizioni è vera. Qualcosa di simile a quanto segueAssociazione di un parametro visibile a un'istruzione 'o' in Knockout

<tr data-bind="visible: active || $parent.displayDeactive">....</tr> 

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 qualsiasi logica in questa associazione, ma se non riesco a farlo direttamente qual è il modo migliore per farlo poiché sto vincolando una proprietà di un modello e un oggetto del $ viewmodel principale.

risposta

39

Se si utilizza il valore di un osservabile in un'espressione, è necessario fare riferimento ad essi come una 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 calcolato sul bambino (la funzione dovrebbe essere in grado di fare riferimento al genitore)
  • creare una funzione sul genitore che accetta il figlio e restituisce il valore (i collegamenti vengono eseguiti in un osservabile calcolato, in modo che si attivi di nuovo quando si osserva che accede modifiche)
  • creare una funzione sul bambino che porta nel genitore e restituisce il valore (stessa nota come sopra)

Campione di logica nel legame e utilizzando una funzione sul genitore qui: http://jsfiddle.net/rniemeyer/f6ZgH/

+0

Grazie, sapevo che sarebbe stato qualcosa di semplice. E grazie per tutto il tuo lavoro su Knockout. Lo apprezzo certamente. – PlTaylor

6

Aggiungi i paren dopo gli osservabili, poiché li stai 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 che anche io ... 1 'd).

Problemi correlati