我在這裏做錯了什麼想要建立一個基於userRole的導航 更新:結果是對象console.log(result); console.log(JSON.stringify(result));給我這個回Durandal建立基於用戶角色的路線
function activate() {
console.log(appsecurity.userInfo());
if (typeof (appsecurity.userInfo()) === 'Administrator'){
return privateAccess();
} else {
return publicAccess();
}
router.on('router:route:not-found', function (fragment) {
logError('No Route Found', fragment, true);
});
}
var courses = [
{ route: '', title:'Welcome', moduleId: 'viewmodels/welcome', nav: true, type: 'guest' , authorize: ["User", "Administrator"]},
{ route: 'flickr', moduleId: 'viewmodels/flickr', nav: true, authorize: ["User"] },
{ route: 'youtube', moduleId: 'viewmodels/youtube', nav: true, type: 'member' },
{ route: 'facebook', moduleId: 'viewmodels/facebook', nav: true, authorize: ["Administrator"] },
{ route: 'skype', moduleId: 'viewmodels/skype', nav: true, authorize: ["User", "Administrator"] }
] ;
var acceptedTypes = ["Administrator", "Visitor"];
var result = (function(authTypes) {
var results = [], i, j, k, works;
for(i=0; i<courses.length; i++) {
if(courses[i]&&courses[i].authorize&&courses[i].authorize.length) {
works = false;
for(j=0; j<courses[i].authorize.length; j++) {
for(k=0; k<authTypes.length; k++) {
works = works || courses[i].authorize[j] === authTypes[k];
}
}
if(works)
results.push(courses[i]);
}
}
return results;
}) (acceptedTypes);
console.log(JSON.stringify(result));
function privateAccess() {
return router.map(result) // Map the routes
.buildNavigationModel() // Finds all nav routes and readies them
//TODO!?: .mapUnknownRoutes("notfound","notfound")
.mapUnknownRoutes('account/login', 'not-found')
.activate(); // Activate the router
//.activate({ pushState: true });
}
,那麼這將無法工作數據綁定=「的foreach:router.navigationModel」是EMPTY,我看不到任何錯誤控制檯
var routesArray = JSON.stringify(result);
router.makeRelative({ moduleId: 'viewmodels' }); // router will look here for viewmodels by convention
router.map(routesArray).buildNavigationModel();
return router.makeRelative({ moduleId: 'viewmodels' }).map(routesArray).mapUnknownRoutes('account/login', 'not-found').buildNavigationModel();
但這將工作
router.makeRelative({ moduleId: 'viewmodels' }); // router will look here for viewmodels by convention
router.map([
{ route: '', title:'Welcome', moduleId: 'viewmodels/welcome', nav: true, type: 'guest' , authorize: ["User", "Administrator"]},
{ route: 'flickr', moduleId: 'viewmodels/flickr', nav: true, authorize: ["User"] },
{ route: 'youtube', moduleId: 'viewmodels/youtube', nav: true, type: 'member' },
{ route: 'facebook', moduleId: 'viewmodels/facebook', nav: true, authorize: ["Administrator"] }
{ route: 'skype', moduleId: 'viewmodels/skype', nav: true, authorize: ["User", "Administrator"] }
]).buildNavigationModel();
return router;
爲什麼你將一個字符串數組傳遞給'router.map'?是否有可能'var routesArray = JSON.stringify(result);'應該解析而不是字符串化? –
,因爲示例2工作正常,並且自routesArray = JSON。字符串化(結果);我認爲這將工作就像在示例2 –
[使用路由器](http://durandaljs.com/documentation/Using-The-Router.html)中的第二個代碼示例顯示路由器接收解碼陣列。 –