javascript - 迪兰达尔 2.0 "routes"

标签 javascript durandal hottowel durandal-navigation durandal-2.0

我是初学者,正在尝试学习 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/

相关文章:

angularjs - Hot Towel Angular-Breeze 类(class) - 出现 BreezeProvider 错误

angularjs - ng-options 上的 Angular UI-Bootstrap 下拉按钮

Javascript/HTML 灰色 radio 列表?

javascript - 浏览器等待 ajax 调用完成,即使在调用 abort 之后(jQuery)

Javascript onload 和脚本回调函数,哪个优先?

javascript - 根据复选框单击状态更新元素

durandal - 如何在不使用 Gulp watch 的情况下为 Aurelia.io 应用程序提供服务

android - tel 和 mailto 链接在 cordova 应用程序中停止工作

knockout.js - Durandal 中的 Knockout Mapping 插件未定义

javascript - Knockout observablearry 不具有约束力