结合参数,splat路由和子路由器

时间:2013-08-22 14:09:27

标签: durandal

我们正在尝试使用路线参数和splat路线。这就是场景。

我们有一个导航菜单,然后作为其中一个选项的一部分,我们有一个向导。当我们转到向导时,我们想要传递我们正在处理的对象的标识符。同时,向导有步骤,我们希望在子级路由器处理这些步骤,并将步骤作为路径的一部分传递(*详细信息)。

splat路线如下所示:

   { route: 'offer/:offerId/*details', moduleId: 'offerbuilder/index', title: 'Offer Builder' }

儿童路线如下:

[
   { route: 'parameters', moduleId: 'parameters', title: 'Parameters', nav: true },
   { route: 'cart', moduleId: 'cart', title: 'Cart', nav: true },
   { route: 'workspaces', moduleId: 'workspaces', title: 'Workspaces', nav: true }
]

我们已经有路由器和子路由器来适当地解决路由,但我们遇到的问题是子路由的哈希不会替换传递的参数值,而是使用原始模式。换句话说,这确实有效:

 http://oursite/main/#offer/123456789/parameters

但是作为向导步骤的一部分生成的哈希是:

  http://oursite/main/#offer/:offerId/parameters

我的问题是,splat路由是否支持包含参数?如果没有,建议的解决方法是什么?

1 个答案:

答案 0 :(得分:4)

目前这是子路由器的问题,discussed here

解决方法是拉取parentId并手动构建子路由器的哈希值。

var childRouter = router.createChildRouter()
   .makeRelative({
      moduleId: 'employees/doctors',
      route: 'doctors/:id',
   });

return {
   router: childRouter,
   activate: function() {
      var doctorID = router.activeInstruction().params;

      childRouter.map([
         { route: '', moduleId: 'patients/index', hash: '#employees/doctors' + doctorID(), nav: true },
         { route: 'schedule', moduleId: 'schedule/index', hash: '#employees/doctors/' + doctorID() + '/schedule', nav: true }
      ]).buildNavigationModel();
   }
};