我有一个路线(医生/:id),其中包含两个子页面(医生/:id / index和医生/:id / details)。这是我的shell.html:
<div id="content-head">
<h1>Page Title</h1>
</div>
<div id="content-main">
<ul class="tabs" data-bind="foreach: router.navigationModel()">
<li data-bind="css: { selected: isActive }"><a data-bind="attr: { href: hash }, text: title"></a></li>
</ul>
<div id="content-main-inner" data-bind="router: {}"></div>
</div>
<aside data-bind="compose: { model: 'doctors/_sidebar/index' , view: 'doctors/_sidebar/index' }"></aside>
侧栏组合包含与页面相关的信息,例如统计信息和指向其他:id
页面的链接。
我想在两个子页面之间导航时保持侧边栏不变,但是当我从doctors/100
转到doctors/200
时,我希望侧边栏能够刷新并向我提供新数据。有没有办法实现这个目标?
答案 0 :(得分:3)
我建议您重构激活并从中获取数据加载代码,然后将其放入新函数(必要时通过activate调用)。然后使用Durandal事件来订阅事件,并重新加载该事件的数据。然后在你的其他“子页面”中,当它们加载,激活或者其他任何事件时触发该事件。
答案 1 :(得分:0)
您可以在撰写时使用if绑定并将其切换为:
<!-- ko if: $root.composeDimensionListShow -->
<!-- ko compose: here-->
<!-- /ko -->
使用javascript:
vm.composeDimensionListShow = ko.observable(false);
vm.composeDimensionListToggle = function () {
vm.composeDimensionListShow(true);
vm.composeDimensionListShow.valueHasMutated(); //knockout will normally not update if it is already true, but we want to refresh every time regardless
};
对于某些情况,另一个答案可能会更好,但在这样做不切实际的情况下,这样做会更简单,更准确地回答您的问题。
如果要刷新撰写,只需调用compositionlisttoggle()。