Knockout (web framework)

From Wikipedia, the free encyclopedia
(Redirected from KnockoutJS)
Jump to navigation Jump to search
Knockout
Original authorSteve Sanderson
Initial releaseJuly 5, 2010 (2010-07-05)
Stable release
3.5.1 / November 5, 2019; 6 years ago (2019-11-05)
RepositoryKnockout Repository
Written inJavaScript
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    Size59 KB minified / 283 KB (development mode)
    TypeJavaScript library
    LicenseMIT
    Websiteknockoutjs.com

    Lua error in mw.title.lua at line 392: bad argument #2 to 'title.new' (unrecognized namespace name 'Portal'). 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.

    Features

    [edit | edit source]

    Knockout includes the following features:

    • Declarative bindings
    • Automatic UI refresh (when the data model's state changes, the UI updates automatically)
    • Dependency tracking Templating (contains a dedicated template engine, but other templating engines can be used)

    Examples

    [edit | edit source]

    1. 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 Model (JavaScript)

    [edit | edit source]
    function ViewModel() {
        this.firstName = ko.observable("");
        this.lastName = ko.observable("");
    
        this.fullName = ko.computed(
            function() { return this.firstName() + " " + this.lastName(); }, 
            this);
    }
    
    ko.applyBindings(new ViewModel());
    

    2. Creating Custom Binding Handlers in KnockoutJS

    Use the ko.bindingHandlers object to specify your custom binding’s name and create an init or update function when creating a custom binding handler. The init function is called when the binding has been applied to an element, perfect for onetime initialization. Whenever the bound observable changes, an update function is called that allows you to react to changing data.

    Here’s a simple example of a custom binding handler that applies a jQuery UI datepicker to an input element:

    Custom Binding Handler

    [edit | edit source]
    ko.bindingHandlers.datepicker = {
        init: function(element, valueAccessor) {
            $(element).datepicker({
                onSelect: function(date) {
                    var observable = valueAccessor();
                    observable(date);
                }
            });
        },
        update: function(element, valueAccessor) {
            var value = ko.unwrap(valueAccessor());
            $(element).datepicker("setDate", value);
        }
    };
    

    References

    [edit | edit source]
    • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    [edit | edit source]