javascript - Loading child routers from database durandal -
i trying create child routes in durandal 2 database starterkit without success.
although succeeded in rendering static contents shown below:
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 }; });
however i've been unable dynamically output the menus database. doing somethig wrong? please see code below
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 looks pretty same. please help
<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>
i think happening in code getpageroutes
returning blank array. should returning promise list of routes. need this.
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; }); }
i making assumtion om.getoasis(134)
return promise of list of routes.
not sure if have in durandal app similar want achieve. use q promises library handle async calls webapi.
define(['plugins/http', 'services/logger'], function (http, logger) { "use strict"; var getroutes = function () { return http.get("routes/availableroutes").then(function (data) { logger.log("routes loaded", data, 'services/routes', false); return data; }); }; var routes = { getroutes: getroutes }; return routes; });
the calling code becomes following.
return routes().then(function (availableroutes) { return router.makerelative({ moduleid: 'sectiongroups', fromparent: true }) .map(availableroutes) .buildnavigationmodel() .activate(); });
Comments
Post a Comment