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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top