0

durandal 2에서 자식 데이터베이스 경로를 성공적으로 만들지 않으려 고 시도했습니다. 데이터베이스에서 자식 라우터로드 중 durandal

나는 다음과 같이 정적 인 내용으로 렌더링에 성공했지만 : 나는 데이터베이스에서 메뉴를 동적으로 출력 할 수 없었습니다 그러나

define(['plugins/router', 'knockout'], function (router, ko) { 
var childRouter = router.createChildRouter() 
    .makeRelative({ 
     moduleId: 'sectionGroups', 
     fromParent: true 
    }).map([ 
     { route: ['', 'child1'], moduleId: 'pages/child1', title: 'child1', nav: true }, 
     { route: 'child2: moduleId: 'pages/child2', title: 'child2', nav: true }, 
     { route: 'child3', moduleId: 'pages/child3', title: 'child3', nav: true } 
    ]).buildNavigationModel(); 

return { 
    router: childRouter 
}; 
}); 

. 내가 뭔가 잘못하고 있니? 아래 코드를 참조하십시오.

define(['plugins/router', 'knockout','services/oasisManager', 'services/logger'], function (router, ko, om, logger) { 

var pageRoutes = getPageRoutes(); 

var childRouter = router.createChildRouter() 
    .makeRelative({ 
     moduleId: 'sectionGroups', 
     fromParent: true 
    }) 
    .map(pageRoutes) 
    .buildNavigationModel(); 

function getPageRoutes() { 
    var pageRoutes = []; 
    om.getOasis(134).done(function() { 
     ko.utils.arrayForEach(om.activeOasis.PageRoutes, function(item) { 
      var nav = true; 
      if (item.Route == '') { 
       nav = false; 
      } 
      pageRoutes.push({ 
       route: item.Route, 
       moduleId: item.ModuleId, 
       title: item.Title, 
       nav: nav 
      }); 
     }); 
    }); 
    return pageRoutes; 
} 

return { 
    router: childRouter 
}; 
}); 

HTML은 거의 같습니다. 난 당신의 코드에서 무슨 일이 일어나고 있는지 생각

<div class="container-fluid knockout-samples"> 
<div class="row-fluid"> 
    <div class="span2 well"> 
     <ul class="nav nav-list"> 
      <li class="nav-header">Basic Examples</li> 

      <!--ko foreach: router.navigationModel--> 
      <li data-bind="css: { active: isActive }"> 
       <a data-bind="attr: { href: hash }, text: title"></a> 
      </li> 
      <!--/ko--> 
     </ul> 
    </div> 
    <div class="span10"> 
     <!--ko router: { transition:'entrance', cacheViews:true }--><!--/ko--> 
    </div> 
</div> 

답변

0

도움 getPageRoutes 빈 배열을 반환하는 것입니다하시기 바랍니다. 그것은 노선 목록에 대한 약속을 반환해야합니다. 당신은 아마도 이런 것을 필요로 할 것입니다.

function getPageRoutes() { 
    return om.getOasis(134).done(function(routes) { 
     var pageRoutes = []; 
     ko.utils.arrayForEach(routes, function(item) { 
      var nav = true; 
      if (item.Route == '') { 
       nav = false; 
      } 
      pageRoutes.push({ 
       route: item.Route, 
       moduleId: item.ModuleId, 
       title: item.Title, 
       nav: nav 
      }); 
     }); 
     return pageRoutes; 
    }); 
} 

나는 om.getOasis(134)는 경로 목록의 약속을 반환하는 assumtion을하고있다.

이것이 도움이 될지 확실하지 않지만 이것이 내 durandal 앱에서 달성하고자하는 것과 비슷한 것을하기위한 것입니다. 나는 Q promises library을 사용하여 webapi에 대한 비동기 호출을 처리합니다.

그러면 호출 코드는 다음과 같이됩니다.

return routes().then(function (availableRoutes) { 
    return router.makeRelative({ 
     moduleId: 'sectionGroups', 
     fromParent: true 
    }) 
    .map(availableRoutes) 
    .buildNavigationModel() 
    .activate(); 
});