0

这是我的路由器配置:

        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文档?

我有一个传统的文件结构:

在此处输入图像描述

4

2 回答 2

1

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

改变这个:

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

对此:

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

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

于 2013-04-16T01:22:20.423 回答
-1

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

于 2013-07-03T11:12:18.630 回答