路由到相同的“模式”但具有不同的“参数”、“名称”和“目标”

Routing to the same `pattern` but with different `args` ,`name` and `targets`

我想做的是,路由中的 pattern 相同,但 targetname 不同:

"routes":[
            {
                "pattern": "spec/{Name}/{Action}", //{Name}=ABC  {Action}=add
                "name": "ABCSpecificationNew",
                "target": "ABCSpecificationNew"
            },
            {
                "pattern": "spec/{Name}/{Action}", //{Name}=ABCPlus  {Action}=add
                "name": "ABCPlusSpecificationNew",
                "target": "ABCPlusSpecificationNew"
            },

            .....
],

我正试图通过这种方式 Name,

    var routerPath=Name+"SpecificationNew";  //getting `Name` by `Id` from `view`//    
    this.getRouter().navTo(routerPath,
                {
                    Action: "Add",  Name:Name                                                                                                                                                                                                                                                          
                });

所以从上面,NameAction 被传递给 pattern

"targets":[
"ABCSpecificationNew": {
                    "viewId": "abc",
                    "viewPath": "com.sample.view.employee",
                    "viewName": "ABCSpecificationConfigurationNew",
                    "parent": "home",
                    "controlId": "parentNavContainer",
                    "controlAggregation": "pages"
                },
"ABCPlusSpecificationNew": {
                    "viewId": "abcplus",
                    "viewPath": "com.sample.view.employee",
                    "viewName": "ABCplusSpecificationConfigurationNew",
                    "parent": "home",
                    "controlId": "parentNavContainer",
                    "controlAggregation": "pages"
                },
              .....
          ]

现在,当我尝试点击 pattern ---> spec/ABCPlus/add

路由到 ABCSpecificationNew 而不是 ABCPlusSpecificationNew,

据我所知,它应该匹配目标和路由到相同的, 但这并没有发生在我的情况下。

尽管这两种情况的模式不同,但它是路由到第一条路线。

我不知道为什么会这样,我已经确认视图和控制器中的每个部分都没有错误,它一定只发生在路由中,

有没有办法实现这个,感谢任何帮助..TIA

根据路由考虑,相同的模式没有任何意义。所以我对你的建议是使用像 "pattern": "spec/{Name}/{Action}" 这样的单一模式和一个额外的参数,这将帮助你决定你想要渲染的视图类型 ABCSpecificationConfigurationNewABCplusSpecificationConfigurationNew.

模式

"pattern": "spec/{Name}/{Action}/{Type}"

"routes":[
  {
    "pattern": "spec/{Name}/{Action}/{Type}", //{Name}=ABC/ABCPlus - {Action}=add - {Type}= ABCSpecificationConfigurationNew OR ABCplusSpecificationConfigurationNew
    "name": "ABCSpecificationNew",
    "target": "ABCSpecificationNew"
  } 
  .....
],

"targets":[
  "ABCSpecificationNew": {
    "viewId": "XYZ",
    "viewPath": "com.sample.view.employee",
    "viewName": "ABCSpecificationConfiguration", //single view to render the content based on the parameter Type
    "parent": "home",
    "controlId": "parentNavContainer",
    "controlAggregation": "pages"
  }
  .....
]

大括号是占位符。匹配完全基于模式。因此 ANYTHING 将匹配 {Name}ABCABCPlusDEFCHEESE_NUGGETS,随你便。

匹配时,路由器会使用它找到的第一个目标。在你的情况下 ABCSpecificationNew.

如果您只想支持 ABCABCPlus 这两个名称,我建议如下:

"routes": [
    {
        "pattern": "spec/ABC/{Action}",
        "name": "ABCSpecificationNew",
        "target": "ABCSpecificationNew"
    }, {
        "pattern": "spec/ABCPlus/{Action}",
        "name": "ABCPlusSpecificationNew",
        "target": "ABCPlusSpecificationNew"
    },
    .....
],

此外,如果您的操作始终是 add(并且您的路线的名称和目标包含单词 New,那么在您的路线定义中也对操作进行硬编码可能是有意义的,例如 "pattern": "spec/ABCPlus/add".

因为现在有人可以输入 spec/ABC/delete 并且也会输入 ABCSpecificationNew