Zum Inhalt springen

Knockout.js

aus Wikipedia, der freien Enzyklopädie
Knockout

[[Datei:Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value)|150px]]
Basisdaten

Hauptentwickler Steve Sanderson
Entwickler Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value)
Erscheinungsjahr 2010
Aktuelle Version Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value)
(Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value))
Aktuelle Vorabversion Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value)
(Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value))
Betriebssystem Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value)
Programmier­sprache JavaScript
Kategorie Webframework
Lizenz MIT-Lizenz
www.knockoutjs.com

Knockout.js – oft einfach als Knockout bezeichnet – ist ein 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<ref>Introduction to Model/View/ViewModel pattern for building WPF apps</ref> 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.<ref>Client Insight – Getting Started with Knockout. Abgerufen am 25. Oktober 2021 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> Obwohl es gemeinsam mit dem ASP.NET-MVC-Standard-Template für Webanwendungen ausgeliefert wird, handelt es sich um kein Microsoft-Produkt.<ref name="Hello, Microsoft">Steven Sanderson's blog post 'Hello, Microsoft'. blog.stevensanderson.com, 3. November 2010, abgerufen am 8. Januar 2016.</ref>

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

Beschreibung[Bearbeiten]

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.<ref>Observables in Knockout (englisch)</ref>

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[Bearbeiten]

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

Beispiel[Bearbeiten]

<syntaxhighlight lang="html"> //HTML-View

   You've clicked  times
  <button data-bind="click: incrementClickCounter">Click me</button>

<script type="text/javascript">

   //Definition des ViewModels
   var viewModel = {
       numberOfClicks : ko.observable(0),
       incrementClickCounter : function() {
           var previousCount = this.numberOfClicks();
           this.numberOfClicks(previousCount + 1);
       }
   };
   //Datenbindung per Binder aktivieren
   ko.applyBindings(viewModel);

</script>

</syntaxhighlight>

Literatur[Bearbeiten]

  • Jamie Munro: Knockout.js: Building Dynamic Client-Side Web Applications. O’Reilly and Associates, 2014, ISBN 978-1-4919-1431-1.
  • Andrey Akinshin: Getting Started with Knockout.js for .NET Developers. Packt Publishing, 2015, ISBN 978-1-78398-400-8.

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

<references />