Durandal - 根据网址或路线隐藏页面部分

时间:2015-02-25 19:03:27

标签: javascript jquery durandal durandal-2.0

在我的durandal应用程序中,除主页之外的每个页面都有一个左侧导航栏。这个左侧导航栏应该在刷新时更新,但它应该驻留在shell.html上。

问题是我无法在主页上正确隐藏它。当我在主页上时,我可以使用jquery hide()方法隐藏leftnav div,但问题是我只能在data-bindind之后使用jquery代码,直到我可以看到导航栏。我尝试使用durandal组合,但我不知道如何才能在主页中隐藏导航栏,因为我不知道如何知道我是否在主页上或不在shell.js内。

任何想法?

1 个答案:

答案 0 :(得分:5)

在您的视图模型中,您需要通过创建一个侦听当前指令值的计算机来挂钩您的路由器:

var ko = require('knockout');
var router = require('plugins/router');

function viewModel() {
    this.currentRoute = ko.computed(function() {
        return router.activeInstruction().fragment;
    });
}

然后,您可以使用视图中的可见绑定来引用此变量。

<!-- home route only -->
<div data-bind="visible: currentRoute() == 'home'></div>

<!-- non-home routes -->
<div data-bind="visible: currentRoute() != 'home'></div>

如果您需要更复杂的逻辑,可以创建一个特殊的计算函数,对当前路径进行特定测试并改为引用该变量。例如:

this.isSpecialRoute = ko.computed(function() {
    var re = /matchspecialroute/;
    return re.test(this.currentRoute());
}, this);