Knockout - Apply seperate view models to specific parts of a view
HTML
<script src="https://github.com/downloads/SteveSanderson/knockout/knockout-2.0.0.debug.js"></script>
<script src="https://raw.github.com/SteveSanderson/knockout.mapping/master/knockout.mapping.js"></script>
<ul id="menu" data-bind="foreach:options">
<li data-bind="text:option"></li>
</ul>
<br/>
<section id="person">
<p>Hey, <span data-bind="text:fullName"></span>, what are you doing?</p>
<p><label>First: <input type="text" data-bind="value:firstName" /></label></p>
<p><label>Last: <input type="text" data-bind="value:lastName" /></label></p>
</section >
<br />
<section id="address">
<p>You live at: <span data-bind="text:fullAddress "></span></p>
</section >
JavaScript
var menuViewModel = {
options: ko.observableArray([
{ option: 'person'},
{ option: 'address'}
])
};
ko.applyBindings(
menuViewModel,
document.getElementById('menu')
);
var personViewModel = new function() {
var self = this;
this.firstName = ko.observable('Shiv');
this.lastName = ko.observable('Da');
this.fullName = ko.computed(function() {
return self.firstName() + ' ' + self.lastName();
});
};
ko.applyBindings(
personViewModel,
document.getElementById('person')
);
var addressViewModel = new function() {
var self = this;
this.address = ko.observable('123 main');
this.city = ko.observable('Smallville');
this.state = ko.observable('TX');
this.zip = ko.observable('12345');
this.fullAddress = ko.computed(function() {
return self.address() + ' ' + self.city() + ' ' + self.state() + ' ' + self.zip();
});
};
ko.applyBindings(
addressViewModel,
document.getElementById('address')
);