2016-12-25 191 views
0

我在MVC 5中使用Visual Studio 2013中的Hot Towel模板,现在我的项目中的每个页面都有来自热毛巾的默认代码,但我想设计一个网站,看起来像:http://blackrockdigital.github.io/startbootstrap-stylish-portfolio/ 当我向下滚动,我可以看到网页的不同部分site.but如果我想使用迪朗达尔和淘汰,我认为我必须使用使用组合数据绑定与另一个数据绑定

"data-bind="compose: { view: 'footer' }" 

我的问题是,当我在我的主页中使用这行代码,然后在我的footer.html中使用另一种类型的数据绑定(我的页脚也有单独的Java脚本文件),例如文本绑定,文本不会出现 但如果我不使用Compose绑定它将工作。 所以有人可以告诉我如何建立一个像我想用热毛巾一样的网页,并敲出来,非常感谢。

我的页脚视图是这样的:

<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> 

和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 

});

它们只是检查结果

和我的主网页,我想看看那里的注脚那么简单:

<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> 

但是当我跑我的项目,结果如下:

result

回答

0

的问题是,你只指定view页脚应使用而不是相关的view model为您的view

所以,你想更新compose像这样绑定 -

"data-bind="compose: { view: 'footer', model: 'footer' }"

我不过,建议使用一个observable来存储您的view和相应的model利用双向绑定。

所以,在你的主viewModel,你将有一个observable定义像这样 -

self.footer = ko.observable({ 
    view: 'footer', 
    model: 'footer', 
    activationData: anyDataYouWouldLikeToInitializeYourFooterWith 
}); 

,然后更新您的compose结合像这样 -

"data-bind="compose: footer"

这样,您就可以compose动态显示不同视图(以防每次显示一个视图)插入主视图。