2. Using foreach without a container
element
The <!-- ko --> and <!-- /ko --> comments act as start/end
markers, defining a “virtual element” that contains the
markup inside
<ul>
<li class="header">Header item</li>
<!-- ko foreach: myItems -->
<li>Item <span data-bind="text: $data"></span></li>
<!-- /ko -->
</ul>
8. The "event" binding
Accessing the event object, or passing more parameters
<div data-bind="event:
{ mouseover: myFunction }">
Mouse over me
</div>
var viewModel = {
myFunction: function(data, event)
{
……
}
};
9. The "event" binding
Accessing the event object, or passing more parameters
<div data-bind="event:
{ mouseover:
function(data, event) {
myFunction('param1', 'param2', data, event)
}
}">
Mouse over me
</div>
10. The "event" binding
Accessing the event object, or passing more parameters
<button data-bind="event:
{ mouseover:
myFunction.bind($data, 'param1', 'param2')
}">
Click me
</button>
11. The "event" binding
Allowing the default action
<a href="http://XXXX.html" data-bind="event:
{ click: myFunction }">Click me</a>
var viewModel = {
myFunction: function(data, event) {
console.log(data);
return false;
}
};
12. The "event" binding
Preventing the event from bubbling
<div data-bind="event: { mouseover: myDivHandler }">
<button data-bind="event:
{ mouseover: myButtonHandler },
mouseoverBubble: false">
Click me
</button>
</div>
13. Converting View Model Data to Plain JSON
function MyViewModel() {
var self = this;
self.firstName = ko.observable("Bert");
self.lastName = ko.observable("Bertington");
self.fullName = ko.computed(function()
{ return self.firstName() + “, “ +
self.lastName();
});
}
var vm = new MyViewModel();
alert(JSON.stringify(vm));