2014-03-05 8 views
1

Durandal 하위 라우팅을 구성하려고합니다. 부모 라우터가 담당하는 마녀를위한 공개 섹션이 있습니다.상대 모듈 ID가있는 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가 처음 로그인하면

는 로그인은 라우트가 하위 라우터 초기화의 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 설정 개체의 route 속성에서 상위 경로를 지정해 볼 수 있습니까? 리셋 호출을 명시 적으로 시도해보십시오. 마찬가지로 :

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

경로 이름이 올바르게 구성되었습니다. 그들의 모듈이 문제입니다. moduleId는 childRouter를 초기화 할 때마다 라우터 설정 ('childRouter.makeRelative'를 호출 할 때)에서 moduleId의 경로로 가져옵니다. 'http : // localhost : 7777/App/viewmodels/private/viewmodels/private/silos.js 404 (찾을 수 없음)' – razvanz