Knockout.js 使用DurandalJS/Router从Shell.html获取当前页面的标题

Knockout.js 使用DurandalJS/Router从Shell.html获取当前页面的标题,knockout.js,durandal,durandal-navigation,Knockout.js,Durandal,Durandal Navigation,我尝试查找当前页面的标题(导航)。。。对我来说唯一有效的方法就是:这有点难看 <!-- ko foreach: router.navigationModel --> <h1 data-bind="text: title, visible: isActive"></h1> <!-- /ko --> 一个更好的方法是这个。。。但我不知道当前的索引页 <!--<h1 data-bind="text: router.navigat

我尝试查找当前页面的标题(导航)。。。对我来说唯一有效的方法就是:这有点难看

<!-- ko foreach: router.navigationModel -->
    <h1 data-bind="text: title, visible: isActive"></h1>
<!-- /ko -->

一个更好的方法是这个。。。但我不知道当前的索引页

<!--<h1 data-bind="text: router.navigationModel()[____INDEX____].title"></h1>-->


有没有更好地解决此问题的建议?

Durandal的路由器不存储当前路由的索引,它只提供了
isActive
属性来检查给定路由是否处于活动状态。因此,唯一的选择是搜索
isActive
路线

您可以在
shell.js
中创建一个封装此寻路逻辑的计算程序,而不是在视图中使用
foreach

currentTitle: ko.computed(function () {
    var activeRoute = ko.utils.arrayFirst(router.navigationModel(), 
         function (item) {
            return item.isActive();
    });
    if (activeRoute)
        return activeRoute.title;
})
现在,在您的
shell.html
中,您可以编写:

<h1 data-bind="text: currentTitle"></h1>

您也可以选择检查
router.activeInstruction().config
-这是活动路径。@gerrod感谢您提供有关
activeInstruction
的信息,我已经将其包含在我的答案中。我喜欢@gerrod在下面的评论中使用
router.activeInstruction().config.title提供的答案
<h1 data-bind="text: router.activeInstruction().config.title"></h1>