이 답변
문제는 (내가 무엇을 테스트 2.0 라우터를 사용하는 아직)를 Sammy.js 라우터를 사용하여 Durandal의 1.X 마찬가지입니다 당신이 경로를 매핑하는, 속성이 경로의 일부는 관찰 할 수 없습니다. 라우터는 맵핑하고 맵핑하려는 라우트를 취하는데, 추가 라우트가 맵핑되어야 할 때 다시 돌아가 라우트해야합니다.
예 -
router.map({
url: 'home',
moduleId: 'viewmodels/home',
name: 'Home',
visible: true,
settings: {}
});
return router.activate('home');
및 데이터가로드 된 후, 다음 추가 경로로드
-
var newRoutes = [{
url: 'other',
moduleId: 'viewmodels/other',
name: 'Other',
visible: true,
settings: {}
}, {
url: 'about',
moduleId: 'viewmodels/about',
name: 'About',
visible: true,
settings: {}
}];
router.map(newRoutes);
을 편집 당신이 경로를 넣을 수있는 위치에 대한 고민하는 경우에
config.js에 데이터가로드되었을 때로드하려는 모든 경로를 이동하고 앱 시작시 첫 번째 경로 만로드하면됩니다. . 예 -
shell.js
function activate() {
datacontext.loadData().then(loadAllRoutes);
router.map({
url: 'home',
moduleId: 'viewmodels/home',
name: 'Home',
visible: true,
settings: {}
});
return router.activate('home');
}
function loadAllRoutes() {
var routes = config.routes;
router.map(routes);
}
대안
당신이/숨기기 다른 이벤트를 기반으로 경로를 보여 여전히 같은 시간에 그들 모두를로드하려면 바로 얻을 NavBar로 좀 더 창의적입니다. 가시성 전환은 계속 표시로 설정되어 있지만
<ul class="nav">
// Show home route always
<li>Home</li>
<!-- ko foreach: visibleRoutes -->
<li>(Put routes here)</li>
<!-- /ko -->
</ul>
같은 것을 사용하여 데이터로드가 완료 될 때 false에서 true로 dataLoaded을 변경 쉘의 관찰을 만들 수 있습니다.
var dataLoaded = ko.observable(false);
function activate() {
datacontext.loadData().then(loadAllRoutes);
var routes = config.routes;
router.map(routes);
return router.activate(config.startModule);
}
function loadAllRoutes() {
dataLoaded(true);
}
durandal 2.0에서도 작동합니까? 내가 좋아하지 않는 것은 이제 라우트 설정이 모든 곳의 라우터 config.js 파일 대신 사용자 정의 로직이 필요로하는 모든 곳에 퍼져 있다는 것입니다. – Elisabeth
나는 durandal 2.0을 사용하지 않았습니다. 그리고 당신은 여전히 단일 경로를 먼저로드하는 구성에 경로를 지정합니다. temphire breeze durandal 예보기 –
사용할 수있는 도구를 사용하여 수행하려는 작업을 어떻게 수행 할 수 있는지에 대한 답을 두 가지 더 추가했습니다. 대안은 찾고자하는 것을 100 % 달성합니다. 라우트의 visible 속성은 nav에서 볼 수 있는지 여부를 나타내는 플래그 뿐이며 URL 막대에서 히트되는 것을 차단하지 않습니다. –