【发布时间】:2014-02-28 15:02:03
【问题描述】:
我在这里做错了什么想要基于 userRole 构建导航 更新:结果是对象 console.log(result); console.log(JSON.stringify(result)); 把这个还给我
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 });
}
那么这将不起作用 data-bind="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.stringify(result);我在想这将像示例 2 中一样工作
-
Using The Router 中的第二个代码示例显示路由器接收解码后的数组。
-
我试过 router.map().apply(this, routesArray).buildNavigationModel();但它不起作用
标签: javascript durandal