Durandal中的条件路由

Durandal中的条件路由,durandal,single-page-application,hottowel,durandal-navigation,Durandal,Single Page Application,Hottowel,Durandal Navigation,在我基于HotTower的项目中,我使用Durandal 1.1.1进行路由 我有一个登录路径,如果用户未登录,我希望激活该路径 我的路线配置如下: var routes = [ { url: 'login', moduleId: 'viewmodels/login', name: 'Login', visible: true, caption: 'Login' },{ url: 'moduledetail/:id', module

在我基于HotTower的项目中,我使用Durandal 1.1.1进行路由

我有一个登录路径,如果用户未登录,我希望激活该路径

我的路线配置如下:

var routes = [ {
    url: 'login',
    moduleId: 'viewmodels/login',
    name: 'Login',
    visible: true,
    caption: 'Login'
    },{
    url: 'moduledetail/:id',
    moduleId: 'viewmodels/moduledetail',
    name: 'ModuleDetail',
    visible: true,
    caption: 'ModuleDetail'
    }
我想如果用户想要转到
/moduledetail/1
并且还没有通过身份验证,浏览器将导航到路由
/login/moduledetail/1
,因此在成功登录后,返回到
/moduledetail/1

一种可能的解决方案是在
moduledetail
canActivate
中放置一个
navigate to
,如:

function canActivate()
{
    if (!loggedIn)
        router.navigateTo(`#/login/moduledetail/1`)
    return false;
}
但是在
canActivate
期间导航到另一个页面似乎太愚蠢了


是否有任何方法告诉Durandal,在这种情况下,在路由时使用此路由?

在Durandal 2.0中,这是通过使用router.guardRoute实现的:

auth = require('auth');
router.guardRoute = function(model, route) {
    return auth.loggedIn() || '#/login';
};

据我所知,尽管没有记录,但在Durandal 1.x中,这种行为的工作原理是相同的。防护路线是在加载viewModel后但在视图模型上调用activate之前调用的函数。如果为true,则继续路由。如果是字符串,路由器将尝试导航到与该字符串关联的路由。

谢谢您的回答。我不知道durandal 2.0中添加了
guardourite
。但我的问题仍然存在,因为它在durandal 1.x中不起作用,而且由于项目检查点的原因,目前我无法升级到2.0。“据我所知,虽然没有记录,但在durandal 1.x中该行为也起作用。”但我在durandal 1.x中没有找到任何名为
Guradurote
的函数!?在1.1.1中找不到它的原因,因为它是在1.2中添加的。升级时间?@RainerAtSpirit由于时间限制,目前我无法升级该项目,我将在2周内更新。但是是的,1.2,谢谢。