3 Knockout
3.1 Einführung
Knockout (kurz KO) ist eine JavaScript-Bibliothek, die sich hervorragend dazu eignet, Anwendungen zu kreieren, die dem Benutzer einen reibungslosen Programmfluss bieten ohne lästiges Neuladen der Seite. Die Eigenschaften von Knockout und dessen Abgrenzungen zu AngularJS wurden bereits in den vorherigen Kapiteln behandelt. Hier soll es nun ausschließlich um die Technik gehen – von der Installation bis zum praxistauglichen Anwendungseinsatz, das ist das Ziel dieses Kapitels.
3.2 Installation
Die schlanke JavaScript-Bibliothek kann direkt von der Webseiteknockoutjs.com in der aktuellsten Version heruntergeladen werden.
Knockout steht auch in den meisten Package Managern zur Installation bereit. Beispielsweise kann die Bibliothek mit Bower (http://bower.io) oder NuGet (https://www.nuget.org) direkt ins Projekt integriert werden.
Die eigentliche Installation bzw. das Einbinden der Bibliothek in eine Webseite ist einfach. Die Referenz innerhalb einer HTML-Seite wird durch das<script>-Tag erzeugt (Listing 3.1).
<script type='text/javascript'
src='knockout-3.2.0.js'></script>
Listing 3.1: Einbinden von Knockout in eine HTML-Seite
Absolute Performancefreaks nutzen zur Einbindung von Knockout ein Content Delivery Network, beispielsweise Microsoft Ajax CDN oder das CDNJS. Der Vorteil liegt darin, dass der Anwender evtl. über eine andere Webanwendung bereits die Bibliothek lokal in den Browser-Cache geladen hat und somit Knockout nicht noch einmal vom eigenen Webserver bezogen werden muss.
3.2.1 Model-View-ViewModel
Der Aufbau und die Funktion des Designpatterns „Model-View-ViewModel (MVVM)“ wurde bereits im Kapitel „Technik“ ausführlich beschrieben. MVVM bildet die Basis einer jeden Knockout-Anwendung.
Ein ViewModel wird in Knockout mit einem herkömmlichen JavaScript-Objekt abgebildet (Listing 3.2).
var personViewModel = {
forename: 'Timm',
surname: 'Bremus',
age: 31
};
Listing 3.2: Deklaration eines ViewModels
Nachdem ein ViewModel erzeugt wurde, können die einzelnen Eigenschaften an eine View gebunden werden (Listing 3.3).
<p>Der Nachname der Person ist
<span data-bind='text: surname'></span></p>
Listing 3.3: Binden von Eigenschaften in einer View
3.2.2 Knockout aktivieren
Das Attributdata-bind ist zwar ein valides HTML5-Attribut, doch ohne eine gesonderte Behandlung mittels JavaScript kann der Webbrowser nur wenig damit anfangen. Es gilt nun, diesem Attribut Leben einzuhauchen und somit Knockout zu aktivieren.