Knockout.js
# Knockout.js

Knockout.js – oft einfach als Knockout bezeichnet – ist eine freies Webframework zur Umsetzung des Model-View-ViewModel-Musters im Rahmen eines Webclients. Es dient zur losen Kopplung zwischen der Darstellung (HTML-View) und den Nutzdaten (JavaScript-Objekte) durch einen Datenbindungsmechanismus.

Das MVVM-Muster wurde erstmals im Jahr 2005 von dem Microsoft-Architekten John Gossman beschrieben und wird in XAML-basierten Microsoft-Technologien verwendet. Knockout ist eine Portierung dieses ursprünglich technologiespezifischen Entwurfsmusters nach HTML5 und JavaScript. Es wird von dem Microsoft-Entwickler Steve Sanderson entwickelt. Obwohl es gemeinsam mit dem ASP.NET-MVC-Standard-Template für Webanwendungen ausgeliefert wird, handelt es sich um kein Microsoft-Produkt.

Gemäß einer seit 2013 aktiven Umfrage von InfoQ handelt es sich neben AngularJS und Backbone.js um eines der TOP-3-JavaScript-MV*-Frameworks.

## Beschreibung

Das JavaScript-Framework „Knockout.js“ war eines der ersten MVVM-Portierungen nach JavaScript und findet z. B. Einsatz bei der Implementierung von Single-Page-Webanwendungen. Das MVVM-Entwurfsmuster ähnelt dem Model-View-Controller-Muster. Allerdings ist dieses Muster von einem Datenbindungsmechanismus – oft als Binder bezeichnet – abhängig, welcher View und ViewModel als Indirektionsstufe miteinander verknüpft. Dieser Binder wird durch die Bibliothek Knockout bereitgestellt.

Mit dem ViewModel wird das Ziel verfolgt, eine zusätzliche Sichtbarkeitsebene zwischen Model und View zu definieren. Es adaptiert die Fachkonzept-Informationen aus dem Model und dient somit als zusätzliche Abstraktion zwischen den Daten und der Darstellung. Auf diese Weise kann die Kopplung zwischen View und Model reduziert werden. Anders als beim MVC-Muster wird auf Controller-Instanzen beim MVVM-Muster verzichtet. Ereignisse, welche in der Benutzeroberfläche auftreten, werden direkt zum ViewModel geleitet und dort behandelt. Zur automatischen Änderungs- und Eventbenachrichtigung verwendet Knockout.js sogenannte Observable-JavaScript-Objekte. Diese Observables kapseln den eigentlichen Wert im ViewModel für die Darstellung in der View und ermöglichen so eine Datenbindung.

Neben dem Datenbindungsmechanismus verfügt Knockout ebenfalls über die Möglichkeit, HTML-Templates zu definieren. Diese Templates können beispielsweise dazu eingesetzt werden, Auswahllisteneinträge aufgrund einer vorgegebenen Menge an Auswahlmöglichkeiten zu erzeugen. Zum funktionalen Umfang von Knockout gehören ausschließlich Funktionalitäten im Rahmen der Darstellung und Datenanbindung. Mechanismen zur Realisierung einer Navigation innerhalb einer Single-Page-Webanwendung sind nicht vorhanden. Die Fokussierung auf die reine Datendarstellung macht Knockout leichtgewichtiger als andere JS-Frameworks wie AngularJS. Knockout ist unabhängig von anderen JavaScript-Bibliotheken.

## Funktionen

* Deklarative Datenbindung
* Beobachter-Muster: Automatische Aktualisierung der View, wenn Änderungen im Model vorliegen.
* Dependency tracking
* HTML-Templates
