【问题标题】:Durandal child router setup with relative moduleId具有相关模块 ID 的 Durandal 子路由器设置
【发布时间】:2014-03-05 16:28:14
【问题描述】:

我正在尝试配置 Durandal 子路由。我有一个由父路由器负责的公共部分:

//main router
return router.map(config.publicRoutes)
        .buildNavigationModel()
        .mapUnknownRoutes('account/login', '#login/')
        .activate();
//public routes
[{ route: 'login', title: 'Login', moduleId: 'account/login', nav: false, hash: '#login/' },
    { route: 'register', title: 'Register', moduleId: 'account/register', nav: false, hash: '#register/' },
    { route: 'reset-password', title: 'Reset password', moduleId: 'account/reset-password', nav: false, hash: '#reset-password/' },
    { route: 'private*details', moduleId: 'private/private-shell', title: 'Application', nav: true, hash: '#private/' }
];

那么子路由器应该负责私有部分。用户登录后,我正在映射子路由器的路由。根据用户类型(管理员、用户),我正在使用适当的路由激活子路由器:

//initializing the router from the login view

 var promise = Q.all([private_shell.initRoutes(isAdmin || true)]);
 return promise.then(navigate("#private/silos"));



// child router in private-shell

var privateRouter = router.createChildRouter();
var routes = [];

//method to initialize the proper routes after login
var initRoutes = function (isAdmin) {
    privateRouter.reset().makeRelative({
        moduleId: 'viewmodels/private/',
        fromParent: true
    });
    console.log(privateRouter);
    return privateRouter.map(isAdmin ? config.adminRoutes : config.userRoutes).buildNavigationModel();
};

第一次初始化路由器时一切正常,但如果我返回主路由器(登录视图)并执行另一次登录,子路由器会添加两次相关的 moduleId。

在第一次登录后,路由具有 moduleId 'viewmodels/private/route',这是正确的,但第二次登录初始化子路由器时,路由具有 moduleId 'viewmodels/ private/viewmodels/private/路由´.

GET http://localhost:7777/App/viewmodels/private/viewmodels/private/silos.js 404 (Not Found)

什么时候应该:

GET http://localhost:7777/App/viewmodels/private/silos.js

我无法确定可能导致此问题的原因。有什么帮助吗?

【问题讨论】:

    标签: durandal durandal-2.0 durandal-navigation


    【解决方案1】:

    您可以尝试在 makeRelative 设置对象的路由属性中指定父路由吗? 也许还可以尝试使重置调用显式。 像这样:

    privateRouter.reset();
    privateRouter.makeRelative({
        moduleId: 'viewmodels/private/',
        fromParent: true,
        route: 'viewmodels/private'
    });
    

    【讨论】:

    • 路由名称配置正确。他们的模块是问题所在。每次初始化 childRouter 时,从路由器设置(当我调用 childRouter.makeRelative)到路由 moduleId 的 moduleId。 GET http://localhost:7777/App/viewmodels/private/viewmodels/private/silos.js 404 (Not Found)
    猜你喜欢
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 2014-12-01
    • 1970-01-01
    • 2013-05-21
    相关资源
    最近更新 更多