Knockoutjs UG meeting presentation

Post on 20-Jan-2015

920 views 2 download

Tags:

description

Presentation of march Latvian .Net User Group meeting in Riga.

Transcript of Knockoutjs UG meeting presentation

www.dotnet.lv

Valdis IljuconoksSoftware ArchitectMicrosoft MVP

Geta Latvia, Viiar Consultingvaldis.iljuconoks@dotnet.lvhttp://dotnet.lv/blogs/vi

knockout.js

$(function () { $("#btn").click(function () { $.getJSON("/api/customers").then(function (customers) { $.each(customers, function () { $("<li>").text(this.FirstName + " " + this.LastName).appendTo("#customers"); }); }); });});

$(function () { $("#btn").click(function () { $.getJSON("/api/customers").then(function (customers) { var html = tmpl("cust_tmpl", { customers: customers }); $("#customers").html(html); }); });});

<script type="text/html" id="cust_tmpl"> {{each customers}} <li><a href="/api/customer/${Id}">${FirstName} ${LastName}</a></li> {{/each}}</script>

ObservablesBindingsUtilities

Data featuresPlug-ins

Observables

ObservableObservable Array

Dependent Observables (Computed)

ObservablesFunctions (not all browsers support getters and setters)

// read valuevar val = viewmodel.name();

// set valueviewmodel.name(“Valdis”)

Observable ArrayUse with collections

Detect changes only within an arrayUse knockout array methods (cross-browser)

viewmodel.customers = ko.obserableArray();

viewmodel.customers.push(new customer());

indexOf(item)slice(2, 4)push(item)

pop()unshift(item)

shift()reverse()

sort()remove(item)removeAll()

Dependent Observables (Computed)“this” keyword has to be managed

viewmodel.fullname = ko.computed(function() { return this.name() + “ ” + this.surname();})

ObservablesBindingsUtilities

Data featuresPlug-ins

Bindings

Built-in BindingsCustom bindings

Built-in Bindings

data-bind=“”

value:html:text:css:

style:visible:

template:…

Control-flow bindings

data-bind=“”

foreach:if:

ifnot:with:

Custom bindings(most powerful extension point)

Event binding

addOnEnter: function(model, event) { var keycode = (event.which ? event.which : event.keyCode); if (keycode === 13) { viewModel.addTCustomer(); }

return true;}

data-bind=“event: {keypress: addOnEnter}”

Custom bindingsDefine your own behavior

ko.bindingHandlers.yourBindingName = { init: update:}

ko.bindingHandlers.executeOnEnter = { init: function(element, valueAccessor, allBindingAccessor, viewModel) { var value = valueAccessor(); $(element).keypress(function(event) { var keycode = (event.which ? event.which : event.keyCode); if (keycode === 13) { value.call(viewModel); return false; }

return true; }); }};

data-bind=“executeOnEnter: addCustomer”

ObservablesBindingsUtilities

Data featuresPlug-ins

Utilities

ko.utils.arrayFilter()

ko.utils.arrayFilter()ko.utils.arrayFirst()

ko.utils.arrayForEach()ko.utils.arrayIndexOf()

ko.utils.arrayMap()ko.utils.compareArrays()

ko.utils.unwrapObservable()…

ObservablesBindingsUtilities

Data featuresPlug-ins

Data features

ko.toJS()ko.toJSON()

ObservablesBindingsUtilities

Data featuresPlug-ins

Plug-ins

ko.mapping.*

ObservablesBindingsUtilities

Data featuresPlug-ins

Resources

knockoutjs.comblog.stevensanderson.com

knockmeout.comstackoverflow.com -> “knockoutjs”groups.google.com -> “knockoutjs”

must have to build interactive UI

?

Valdis IljuconoksSoftware ArchitectMicrosoft MVP

Geta Latvia, Viiar Consultingvaldis.iljuconoks@dotnet.lvhttp://dotnet.lv/blogs/vi

www.dotnet.lv