使用createChildRouter找不到路由

时间:2014-02-07 16:59:20

标签: requirejs durandal single-page-application hottowel durandal-2.0

对于我的文件夹结构,我有(带有Apps文件夹)视图和viewmodels文件夹。当我尝试点击其中一个链接时,我一直收到“找不到路线”。 Chrome加载页面时也会显示“找不到路由”。 childRouter的新功能。任何想法,为什么我得到“路线未找到?”

LVAvailabillity viewmodel -

 define(['plugins/router', 'durandal/system',  'knockout'], function (router, system, ko) {

var childRouter = router.createChildRouter()
.makeRelative({
moduleId: 'viewmodels',
route: '',
fromParent: true
}).map([
   { route: 'AccessDenied', moduleId: 'AccessDenied', title: 'AccessDenied',                                                          type: 'intro', hash: '#AccessDenied', nav: true },
   { route: 'LCPost', moduleId: 'LCPost', title: 'LCPost', type: 'intro', hash: '#LCPost',     nav: true }
]).buildNavigationModel();

var vm = {
    router: childRouter,
    title: 'Letter Of Credit',
    introSamples: ko.computed(function () {
        return ko.utils.arrayFilter(childRouter.navigationModel(), function (route) {
            return route.type == 'intro';
        });
    }),
    detailedSamples: ko.computed(function () {
        return ko.utils.arrayFilter(childRouter.navigationModel(), function (route) {
            return route.type == 'detailed';
        });
    })
};

2 个答案:

答案 0 :(得分:0)

根据我的经验,在设置任何路由器时,您必须提供默认路由以避免路由未找到错误消息。

尝试将您的一个子路线的路线值设置为''。

路线: ''

答案 1 :(得分:0)

此处缺少的组件未使用splat路径。我改变了代码如下,它工作(只有改变的是添加星*) -

 var childRouter = router.createChildRouter()
 .makeRelative({
 moduleId: 'viewmodels',
 route: '',
fromParent: true
}).map([
     { route: '*AccessDenied', moduleId: 'AccessDenied', title: 'AccessDenied',                                                          type: 'intro', hash: '#AccessDenied', nav: true },
     { route: '*LCPost', moduleId: 'LCPost', title: 'LCPost', type: 'intro', hash:   '#LCPost',     nav: true }
 ]).buildNavigationModel();