【问题标题】:Combining parameters, splat routes and child routers结合参数、splat 路由和子路由
【发布时间】:2013-08-22 14:09:26
【问题描述】:

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

【问题讨论】:

    标签: durandal


    【解决方案1】:

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

    解决方法是拉取parentId,手动为子路由器构造hash。

    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();
       }
    };
    

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 2017-06-14
      相关资源
      最近更新 更多