2014-03-05 46 views
1

我想配置Durandal子路由。我有一个上级路由器负责的女巫的公共部分:Durandal子路由器设置与相对模块Id

//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 /私营/ 路线“,这是正确的,但第二次登录初始化子路由器的路由具有的moduleId'viewmodels /私营/的ViewModels /私人/ 路线'。

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

当它应该是:

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

我无法确定是什么可能会导致这样。任何帮助?

回答

0

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

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

路由名称配置正确。他们的模块是问题。每次初始化childRouter时,路由器设置中的moduleId(当我调用'childRouter.makeRelative')到路由moduleId的时候。 'GET http:// localhost:7777/App/viewmodels/private/viewmodels/private/silos.js 404(Not Found)' – razvanz