Frage

Ich möchte eine sichtbare Eigenschaft binden, um wahr zu sein, wenn eine von zwei Bedingungen wahr ist. So etwas wie das folgende

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

Mein Code funktioniert, wenn ich die eine oder andere Bindungen mache, aber nicht, wenn ich das || einsetze da drin. Ich habe keine Dokumentation gefunden, in der ich besagt, dass ich eine Logik in diese Bindung einfügen kann, aber wenn ich es nicht direkt tun kann Eltern ViewModel.

War es hilfreich?

Lösung

Wenn Sie den Wert eines beobachtbaren in einem Ausdruck verwenden, müssen Sie sie als Funktion verweisen. Also, wenn active und displayDeactive sind Observablen, die Sie tun würden:

data-bind="visible: active() || $parent.displayDeactive()"

Es gibt einige Möglichkeiten, es in das View -Modell zu verschieben, Sie könnten:

  • Erstellen Sie ein berechnetes Observable für das Kind (die Funktion müsste in der Lage sein, auf das Elternteil zu referenzieren).
  • Erstellen Sie eine Funktion auf dem Elternteil, die das Kind aufnimmt und Ihren Wert zurückgibt (Bindungen werden in einem berechneten Beobachtbaren ausgeführt, sodass es erneut abfeuert, wenn er beobachtbar ist, dass sie auf Veränderungen zugreift).
  • Erstellen Sie eine Funktion auf dem Kind, die den Elternteil aufnimmt und den Wert zurückgibt (gleiche Hinweis wie oben)

Probe der Logik in der Bindung und Verwendung einer Funktion auf dem übergeordneten hier: http://jsfiddle.net/rniemeyer/f6zgh/

Andere Tipps

Fügen Sie die Parens nach den Observablen hinzu, da Sie sie bewerten.

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

Hier finden Sie den vollständigen Code: http://jsfiddle.net/johnpapa/gsnus/

Sie könnten eine berechnete Eigenschaft für das Vorlagenelement verwenden, das den Ausdruck bewertet (ich habe gerade den @rpniemeyer gesehen, der auch damit geantwortet hat ... i +1'd).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top