First of all, take a look on:
Often a MainViewModel
aggregates child view models and changes one view model to another thru observable binding.
The easest way and more convenient do apply binding on document ready event
For example:
viewModelFactory = function() {
function MainViewModel(){
var self = this;
self.items = ko.observableArray([
new Page1(),
new Page2()
]);
self.selectedPage = ko.observable(self.items()[0]);
self.onSelected = function(page){
self.selectedPage(page);
};
}
function PageViewModel(templateName, linkName){
var self = this;
self.templateName = templateName;
self.linkName = linkName;
}
function Page1(){
var self = this;
$.extend(self, new PageViewModel('template1', 'Page1'));
self.data = 'blablabla-blablabla';
}
function Page2(){
var self = this;
$.extend(self, new PageViewModel('template2', 'Page2'));
self.people = [
{ name: 'Paul', age: 18, gender: 'male' },
{ name: 'John', age: 25, gender: 'male' },
];
}
return {
create: function(){
return new MainViewModel();
}
};
}();
$(function(){
var mainViewModel = viewModelFactory.create();
ko.applyBindings(mainViewModel);
})
Here's full sample