Durandal路由器“cacheViews”属性是否可在运行时访问和更改?

时间:2014-12-17 15:52:03

标签: caching views durandal router

我正在构建一个可能受益于cacheViews设置为true或false的Durandal SPA,具体取决于应用的个人使用情况。 这就是我目前在shell.html中设置它的方式:

<div class="page-host" data-bind="router: {  cacheViews:true }"></div>

在样本/ index.html中的子路由器中:

<div>
    <!--ko router: {  cacheViews:false }--><!--/ko-->
</div>

1)这些可以在运行时更改吗?如果是这样,怎么样?一个人使用数据绑定而另一个人使用ko评论风格是否重要?

2)这个值有多精细?它是&#34; router&#34;或者&#34;路线&#34;?正如你所看到的,我有一个父路由器和一个子路由器,所以我的html代码中有2个地方我可以设置cacheViews。从我的测试来看,它们看起来好像是彼此独立的。谁能确认一下?我可以在/#page1,/#page2,/ #samples / list等各个路线上设置此值吗?

3)因为页面事件生命周期在true / false之间是不同的,所以我需要在我的vm中有一些特定的逻辑,具体取决于这个值。如何检索当前路线?

由于

1 个答案:

答案 0 :(得分:1)

  

1)这些可以在运行时更改吗?如果是这样,怎么样?

对于任何敲除绑定,如果绑定值触发订阅,则重新计算绑定。这意味着cacheViews可以在运行时更改,如果它是可观察的

我不确定执行此操作的正确方法是ko.observable({ cacheViews: false })还是{ cacheViews: ko.observable(false) }。事实上,我相信哪一个会起作用取决于你正在运行的淘汰赛的版本,但其中一个会起作用。

  

2)使用数据绑定而另一个正在使用是否重要   评论风格?

没有

  

3)这个值有多精细?它是&#34; router&#34;或者每个&#34;路线&#34;?

每台路由器。更具体地说,每个绑定

  

4)我可以在/#page1,/#page2等各个路由上设置此值   / #samples / list等?

没有开箱即用,可让您为每条路线设置cacheViews cacheViews在compose绑定中处理,在路由器的引擎盖下调用,所以你需要挂钩。但是,Durandal非常适合在生命周期的每个部分为自定义逻辑公开钩子。我确信通过一些挖掘,您可以提出自己的定制来处理这个问题。

  

5)因为页面事件生命周期在真/假I之间是不同的   需要在我的虚拟机中有一些特定的逻辑,具体取决于此值。怎么样   我可以检索当前路线吗?

您可能希望在viewModel中从(1)创建observable并让关联的视图读取它,就像敲除中的任何其他可观察对象一样。然后,您将能够直接从viewModel访问当前值。例如:

视图模型

viewModel = {
    settings: ko.observable({
        cacheViews: false
    })
}

视图

<!-- ko router: settings -->