在我的durandal应用程序中,除主页之外的每个页面都有一个左侧导航栏。这个左侧导航栏应该在刷新时更新,但它应该驻留在shell.html上。
问题是我无法在主页上正确隐藏它。当我在主页上时,我可以使用jquery hide()方法隐藏leftnav div,但问题是我只能在data-bindind之后使用jquery代码,直到我可以看到导航栏。我尝试使用durandal组合,但我不知道如何才能在主页中隐藏导航栏,因为我不知道如何知道我是否在主页上或不在shell.js内。
任何想法?
答案 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);