1

我们正在尝试在 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 路线是否支持包含参数?如果没有,建议的解决方法是什么?

4

1 回答 1

4

这是当前子路由器的问题,在此处讨论

解决方案是拉出 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();
   }
};
于 2013-08-22T18:41:12.187 回答