I'm using the Hot Towel template in visual studio 2013 with MVC 5,right now every page in my project has the default code that comes from hot towel, but I want to design a web site that looks like : http://blackrockdigital.github.io/startbootstrap-stylish-portfolio/ when i scroll down i can see different part of web site.but if i want to use Durandal and knock out I think I have to use
"data-bind="compose: { view: 'footer' }"
my problem is, that when i use this line of code in my home page and then in my footer.html use another type of data binding (I have separate java script file for my footer page also) for example like text binding ,the text does not appear but if i do not use Compose binding it will work. so can some one tell me how can i build a web page like the one i want with hot towel and knock out,thanks a lot.
my footer view is like:
<nav class="navbar navbar-fixed-bottom">
<div class="navbar-inner navbar-content-center">
<span class="pull-left"><a href="http://johnpapa.net/spa" target="_blank">Learn how to build a SPA </a></span>
<span class="pull-right">
<a data-bind="attr: { href: pm, title: title }"></a>
</span>
</div>
</nav>
and the footer.js :
define(['services/logger'], function (logger) {
var title = 'Home';
var pm = ko.observable('hi');
var vm = {
activate: activate,
title: title,
pm:pm
};
return vm;
//#region Internal Methods
//#endregion
});
they are so simple just for checking the result
and my main page that i want to see the footer there:
<div>
<header data-bind="compose: { view: 'nav' }"></header>
<section id="content" class="main container-fluid"
data-bind="router: { transition: 'entrance', cacheViews: true }">
</section>
<footer data-bind="compose: { view: 'footer' }"></footer>
</div>
But when I run my project the result is below:
The problem is that you are only specifying the
view
your footer should use but not the relatedview model
for yourview
.So, you would like to update your
compose
binding like so -"data-bind="compose: { view: 'footer', model: 'footer' }"
I however, would suggest for using an
observable
to store yourview
and the correspondingmodel
to leverage two way binding.So, in your main
viewModel
, you would have anobservable
defined like so -And then update your
compose
binding like so -"data-bind="compose: footer"
This way, you can
compose
different views dynamically (in case they all show up one at a time) into your main view.