【问题标题】:Router can't find a page in DurandalJS路由器在 DurandalJS 中找不到页面
【发布时间】:2013-07-03 19:12:18
【问题描述】:

这是我的路由器配置:

        router.useConvention();

        router.mapRoute('error', 'viewmodels/error', "Error");

        router.mapNav('home');
        router.mapRoute('api', 'viewmodels/api', 'API Reference');
        router.mapRoute('set/:id', 'viewmodels/set', 'Set');
        router.mapRoute('folder/:id', 'viewmodels/folder', 'Folder');

        router.handleInvalidRoute = function (route, params) {
            //debugger;
            router.navigateTo('#/error');
        };

        logger.log('app has loaded :)', null, null, false);

        return router.activate('home');

我可以找到 /api 和其他页面,但是当我输入无效路由时,chrome 控制台会显示以下内容:

和其他页面一样,我有 error.js 和 error.html。它在 App/viewmodels/error.js 中,但我不必指定包含任何其他视图/vms 的文件夹...为什么找不到它?

编辑 根据约瑟夫的建议,我激活了“错误”,我得到了这个:

我很困惑......为什么它已经在正确的位置找到了error.js,为什么它认为它会在那个位置找到一个html文档?

我有一个常规的文件结构:

【问题讨论】:

  • 您发布的代码适用于 Durandal Starter Kit 中的新项目。有没有其他地方操纵路由器?
  • 只是为了确保我搜索了整个解决方案并且我没有对路由器进行任何其他调用...我不知道是什么原因造成的:/
  • 有很强的线索表明该路线看起来不错(您没有收到“找不到路线”错误),但解析的路径不正确。根据我的经验,这通常是路由器或 require.config 的错误配置。您可能想尝试拨打 router.activate('error'); 而不是 home,只是为了收集有关发生情况的数据点。如果它在那里爆炸,您可以单步执行 router.js 代码以查看差异发生在哪里。
  • @JosephGabriel 谢谢 - 我刚刚根据您的建议更新了我的帖子。
  • 你的 app.SetRoot 设置是什么?

标签: single-page-application durandal


【解决方案1】:

原来你的问题出在 error.js 本身。在 Google 网上论坛上请求您的文件后,我能够复制问题。

改变这个:

define(['services/dataservice'], function (dataservice) {
    var data = "error";
    return data;
})

到这里:

define(['services/dataservice'], function (dataservice) {
    var data = "error";
    return {}
})

您返回了一个字符串,在这种情况下,Durandal 假定您正在给定路径“/App/error.js”处寻找视图模型。您应该返回某种对象,用于绑定您的可观察对象等。

【讨论】:

  • 哇!我花了一整天的时间试图弄清楚这一点。不敢相信。非常感谢迈克。
【解决方案2】:

添加以下代码: router.mapRoute('pagenotfound', 'viewmodels/pagenotfound', 'page not found', false);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-02
    • 2017-11-05
    • 2018-06-26
    • 2013-08-12
    • 2013-04-07
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多