In der vorherigen Lektion haben wir gesehen, wie die Steuerflussbindungen von Knockout.js ein grundlegendes Schablonensystem für den Ansichtscode darstellen. Kontrollflussbindungen stellen die visuelle Struktur für Ihre Anwendung bereit, ein vollwertiges Templating-System erfordert jedoch mehr als nur Struktur. Mit den Darstellungsbindungen von Knockout.js können Sie die Stile und Formatierungen einzelner Elemente präzise steuern.
Zum Zeitpunkt der Veröffentlichung enthält Knockout.js sechs Bindungen zur Steuerung des Erscheinungsbilds von HTML-Elementen:
Text
: html
: sichtbar
: css
: Stil
: attr
: Wie alle Knockout.js-Bindungen treten Aussehensbindungen immer innerhalb der Datenbindung
Attribut eines HTML-Elements. Im Gegensatz zu den Kontrollflussbindungen der vorherigen Lektion wirken sich Erscheinungsbindungen jedoch nur auf das ihnen zugeordnete Element aus nicht Vorlagenblöcke ändern oder den Bindungskontext ändern.
Text
BindungDas Text
Bindung ist das Brot und die Butter von Knockout.js. Wie wir bereits gesehen haben, zeigt die Textbindung den Wert einer Eigenschaft innerhalb eines HTML-Elements an:
Du solltest eigentlich nur das benutzen Text
Bindung an Elemente auf Textebene (z., , , , etc.), obwohl es technisch auf jedes HTML-Element angewendet werden kann. Als Parameter nimmt die Textbindung einen beliebigen Datentyp an und wandelt ihn vor dem Rendern in einen String um. Die Textbindung wird HTML-Entitäten entgehen, sodass sie verwendet werden kann, um benutzergenerierte Inhalte sicher anzuzeigen.
Text
bindet automatisch HTML-Entitäten in der Ansicht Es ist auch erwähnenswert, dass Knockout.js Browserübergreifende Probleme im Hintergrund verwaltet. Für IE verwendet es die innerText
Eigenschaft, und für Firefox und verwandte Browser wird textContent verwendet.
html
BindungDas html
Durch das Binden können Sie einen String als HTML-Markup rendern. Dies kann nützlich sein, wenn Sie Markup dynamisch in einem ViewModel generieren und in Ihrer Vorlage anzeigen möchten. Sie können beispielsweise ein berechnetes Observable definieren, das aufgerufen wird Formatname
auf unserem Product-Objekt, das etwas HTML enthält:
Funktion Produkt (Name, Preis, Tags, Rabatt) … this.formattedName = ko.computed (function () return ""+ this.name () +""; , diese);
Dann können Sie den formatierten Namen mit dem Symbol rendern html
Bindung:
Während dies das Ziel der Trennung von Inhalt und Darstellung verhindert, wird das html
Das Binden kann sich als ein vielseitiges Werkzeug erweisen, wenn es sinnvoll eingesetzt wird.
html
bindende Rendering-HTML-Entitäten in der Ansicht Wann immer Sie dynamisches HTML rendern, ob über das html
Binden oder ASP.NET - Stellen Sie immer sicher, dass das Markup überprüft wurde. Wenn Sie Inhalte anzeigen müssen, denen Sie nicht vertrauen können, sollten Sie die Text
Bindung statt HTML.
Beachten Sie im vorherigen Ausschnitt auch das vorgestelltes Produkt
ist ein beobachtbares Objekt, daher muss das zugrunde liegende Objekt mit einem leeren Funktionsaufruf referenziert werden, anstatt direkt mit featuresProduct.formattedName auf die Eigenschaft zuzugreifen. Auch dies ist ein häufiger Fehler für Anfänger von Knockout.js.
sichtbar
BindungÄhnlich wie das ob
und wenn nicht
Bindungen: Mit der sichtbaren Bindung können Sie ein Element basierend auf bestimmten Bedingungen anzeigen oder ausblenden. Anstatt das Element jedoch vollständig aus dem DOM zu entfernen, fügt die sichtbare Bindung dem style-Attribut des Elements einfach eine display: none-Deklaration hinzu. Zum Beispiel können wir unsere bestehende Bindung für eine sichtbare Bindung ändern:
Das resultierende HTML für beide
ob
und dassichtbar
Versionen werden im folgenden Codebeispiel gezeigt. In diesem Beispiel wird davon ausgegangen, dass die Bedingung als falsch ausgewertet wird:Sie haben gespeichert !!! Entscheidung, wann verwendet werden soll
sichtbar
gegenob
wird weitgehend durch den Kontext bestimmt. In diesem Fall ist es eigentlich besser, die if-Bindung zu verwenden, also die leereerstellt eine gleiche Anzahl von Spalten für jede Zeile. Diese Bindung nimmt den gleichen Parameter wie die
ob
und ifnot Bindungen. Die Bedingung kann eine Eigenschaft Ihres ViewModel, ein JavaScript-Ausdruck oder eine Funktion sein, die einen Boolean zurückgibt.
Das
css
BindungDas
css
Durch die Bindung können Sie CSS-Klassen für HTML-Elemente basierend auf bestimmten Bedingungen definieren. Anstatt eine Bedingung als Parameter zu übernehmen, nimmt sie ein Objekt, das CSS-Klassennamen als Eigenschaftsnamen und Bedingungen für die Anwendung der Klasse als Werte enthält. Dies wird am besten mit einem Beispiel erklärt.Angenommen, Sie möchten den Rabatt eines Produkts besonders hervorheben, wenn er um mehr als 15% reduziert ist. Eine Möglichkeit, dies zu tun, wäre das Hinzufügen von a
css
Bindung an die Meldung "Sie sparen __%" in der