未找到Splat Route(DurandalJS)

时间:2015-05-28 04:14:02

标签: durandal durandal-2.0 durandal-navigation

我在shell.js中配置了settings splat路由:

router.map([
   { route: 'settings*child', moduleId: 'views/settings/main', nav: true }
]).buildNavigationModel();

views/settings/main.js文件中,我创建了子路由器:

var childRouter = router.createChildRouter().makeRelative({
    moduleId: 'views/settings',
    fromParent: true
}).map([
   { route: 'users',     moduleId: 'child/users/list', nav: true },
   { route: 'users/:id', moduleId: 'child/users/view', nav: false },
]).buildNavigationModel();

文件夹结构如下所示:

/views  
-/settings  
--settings.js      
--settings.html  
--/child  
---/users  
----list.js  
----list.html  
----view.js  
----view.html

我遇到的问题是:

当我尝试从另一个父路由页面导航到设置(#settings)页面时,它将在控制台中显示一条错误消息:

Route Not Found settings undefined

但设置页面仍显示我已创建的所有子路由器列表。

接下来,我尝试导航到#settings/users#settings/users/{id},它可以正常工作,没有任何问题或错误,尽管从另一个父页面尝试它。

我认为问题是splat路径总是被预期会出现在哈希之前的#settings/users之类的东西,并且不会接受#settings没有孩子?

或者我在实施时遗漏了什么?

任何帮助或建议都将不胜感激! 谢谢!

1 个答案:

答案 0 :(得分:0)

我有一个非常相似的设置,我在子路由器上创建一个路由来表示这样的空白路径:

var childRouter = router.createChildRouter().makeRelative({
moduleId: 'views/settings',
fromParent: true
}).map([
   { route: '', moduleId: 'main', nav: true },
   { route: 'users',     moduleId: 'child/users/list', nav: true },
   { route: 'users/:id', moduleId: 'child/users/view', nav: false },
]).buildNavigationModel();