我是初学者,正在尝试学习 SPA/Durandal、Knockout 等...
需要一些关于Admin下拉按钮路由的帮助。
到目前为止,这是我在 shell.js 中的路线:
var routes = [
{ route: '', moduleId: 'home', title: 'Home', nav: 1 },
{ route: 'downtime', moduleId: 'downtime', title: 'Downtime', nav: 2 },
{ route: 'downtimeadd', moduleId: 'downtimeadd', title: 'Add A New Downtime', nav: false, settings: { admin: true } },
{ route: 'production', moduleId: 'production', title: 'Production', nav: 4 }];
我还在 shell.js 中创建了 adminRoutes 以使用 KO 绑定(bind)到 View :
var adminRoutes = ko.computed(function () {
return router.routes.filter(function (r) {
return r.settings.admin;
});
});
根据研究,他们说 router.routes 是一个数组,但是当我将它绑定(bind)到我的 View 时,按钮显示 0 项用于下拉列表。
当我这样做(如下)时,我可以获得所有路由,但我只需要管理路由...
var adminRoutes = ko.computed(function () {
return router.routes;
});
我应该如何进行?好像router.routes 实际上不是一个数组? 如果我尝试将其打印到控制台:
console.log(router.routes[0]); //Chrome says its undefined...
console.log(router.routes); //Shows array of size 4...
是的,没有线索......将不胜感激!
更新------------------------------------ ------------------------------
即使在 RainerAtSpirit 的建议之后,我在代码中过滤时仍然得到一个空数组。
var router = require('plugins/router');
//Array size 4
console.log(router.routes);
//Array size 0
console.log(router.routes.filter(function (r) { return r; }));
但是当我在“chrome 控制台”中运行它时:
var router = require('plugins/router')
router.routes.filter(function (r) { return r; })
我确实取回了数组,所以我不知道为什么在代码中它不起作用。
最佳答案
我让它工作了,虽然可能没有我想要的那么完美。
我注意到的第一个问题是其他人没有看到的问题。在我的示例中(使用 VS 2013 的 HotTowel 模板版本 1.1 中的 druandal 2.0)我注意到在激活方法之前调用了用于添加 adminRoutes 的代码。因此,我的 route.routes 是一个空数组。为了解决这个问题,我切换到只使用从 config.js 映射路由的路由数组(注意:config.routes 而不是 route.routes):
var adminRoutes = ko.computed(function () {
return config.routes.filter(function(r) {
return r.admin;
});
});
最后,我返回“r.admin”。这是希望改进的部分,因为我在没有“设置”组的情况下向管理路由添加了管理属性,请参阅“admin: true”:
var routes = [
{ route: '', moduleId: 'equipment', title: 'Equipment', nav: 1 },
{ route: 'testresults', moduleId: 'testresults', title: 'Test Results', nav: 2 },
{ route: 'testresultdetail/:id', moduleId: 'testresultdetail', title: 'View a test result', nav: false },
{ route: 'testresultadd', moduleId: 'testresultadd', title: 'Add a Test Result', nav: false, caption: '<i class="fa fa-plus"></i> Add Test Result', admin: true }
];
通过这两项更改,菜单项出现了。
关于javascript - 迪兰达尔 2.0 "routes",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19408148/