Knockout (web framework)
Original author(s) | Steve Sanderson |
---|---|
Initial release | July 5, 2010 |
Stable release |
3.4.1
/ November 8, 2016 |
Development status | Active |
Written in | JavaScript |
Size | 58 KB minified / 280 KB (development mode) |
Type | JavaScript library |
License | MIT |
Website |
knockoutjs |
Knockout is a standalone JavaScript implementation of the Model-View-ViewModel pattern with templates. The underlying principles are therefore:
- a clear separation between domain data, view components and data to be displayed
- the presence of a clearly defined layer of specialized code to manage the relationships between the view components
The latter leverages the native event management features of the JavaScript language.
These features streamline and simplify the specification of complex relationships between view components, which in turn make the display more responsive and the user experience richer.
Knockout was developed and is maintained as an open source project by Steve Sanderson, a Microsoft employee. As the author said, "it continues exactly as-is, and will evolve in whatever direction I and its user community wishes to take it", and stressed, "this isn’t a Microsoft product".[1]
Features
Knockout includes the following features:
- Declarative bindings
- Automatic UI refresh (when the data model's state changes, the UI updates automatically)
- Dependency tracking
- Templating (using a native template engine although other templating engines can be used, such as jquery.tmpl)
Simple example
In this example, two text boxes are bound to observable variables on a data model. The "full name" display is bound to a dependent observable, whose value is computed in terms of the observables. When either text box is edited, the "full name" display is automatically updated, with no explicit event handling.
View (HTML)
<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>
<h2>Hello, <span data-bind="text: fullName"></span>!</h2>
View Model (JavaScript)
function ViewModel() {
this.firstName = ko.observable("Joe");
this.lastName = ko.observable("Bloggs");
this.fullName = ko.computed(
function() { return this.firstName() + " " + this.lastName(); },
this);
}
ko.applyBindings(new ViewModel());
References
- ↑ "Steven Sanderson's blog post 'Hello, Microsoft'". blog.stevensanderson.com. November 3, 2010. Retrieved 2014-10-22.
- Sanderson, Steven (3 November 2010). "Hello, Microsoft". Steven Sanderson's blog. Retrieved 12 August 2014.
- Papa, John (February 2012). "Getting Started with Knockout". MSDN Magazine. Retrieved March 9, 2012.
- Papa, John (March 2012). "Knockout's Built-in Bindings for HTML and JavaScript". MSDN Magazine. Retrieved March 9, 2012.
External links
- Official website
- Knockout MVC: A framework integrating KnockoutJS into ASP.NET
- Knockout JS: Helping you build dynamic JavaScript UIs with MVVM and ASP.NET
- Using Isotope with Knockout.js
- Knockout questions on StackOverflow
- Knockout forum on Google Groups
- Knockout JS Examples
- Knockout SPA Framework