强制组成刷新

时间:2013-09-10 14:41:35

标签: javascript durandal

我有一个路线(医生/: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时,我希望侧边栏能够刷新并向我提供新数据。有没有办法实现这个目标?

2 个答案:

答案 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()。