Sapui5 路由到相同的'pattern',但具有不同的'args','name'和'targets'`

Sapui5 路由到相同的'pattern',但具有不同的'args','name'和'targets'`,sapui5,Sapui5,我想做的是,路由中的模式是相同的,但是目标和名称是不同的,如下所示: "routes":[ { "pattern": "spec/{Name}/{Action}", //{Name}=ABC {Action}=add "name": "ABCSpecificationNew", "target": "ABCSpecificationNew" },

我想做的是,路由中的
模式
是相同的,但是
目标
名称
是不同的,如下所示:

"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                                                                                                                                                                                                                                                          
                });
所以从上面开始,
Name
Action
被传递给模式

"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"
                },
              .....
          ]
现在,当我尝试点击
模式时
-->
spec/ABCPlus/add

它正在路由到
abcsspecificationnew
,而不是
abcplussspecificationnew

据我所知,它应该与目标和路线匹配, 但我的情况并非如此

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

我不知道为什么会发生这种情况,我确认的视图和控制器中的每个部分都没有错误,而且一定是在布线过程中发生的


有没有办法实现这一点,任何帮助都是值得赞赏的。TIA

按路由考虑相同的模式将毫无意义。因此,我给您的建议是使用一个模式,如

“pattern”:“spec/{Name}/{Action}”
和一个额外的参数,它将帮助您决定要呈现的视图类型
abcsspecificationconfigurationnew
abcplussspecificationconfigurationnew.

模式

“模式”:“spec/{Name}/{Action}/{Type}”


花括号是一个占位符。匹配完全基于模式。因此,任何内容都将匹配
{Name}
。无论是ABC、ABCPlus、DEF、奶酪块,你都可以说

匹配时,路由器将使用它找到的第一个目标。在您的情况下,
abcsspecificationnew

如果您只想准确地支持两个名称
ABC
ABCPlus
,我建议如下:

"routes": [
    {
        "pattern": "spec/ABC/{Action}",
        "name": "ABCSpecificationNew",
        "target": "ABCSpecificationNew"
    }, {
        "pattern": "spec/ABCPlus/{Action}",
        "name": "ABCPlusSpecificationNew",
        "target": "ABCPlusSpecificationNew"
    },
    .....
],
此外,如果您的操作始终是
add
(并且路线的名称和目标包含单词
New
,则在路线定义中也对操作进行硬编码可能是有意义的,例如
“模式”:“spec/ABCPlus/add”


因为现在有人可以输入
spec/ABC/delete
,也可以输入
abcsspecificationnew

,所以
type
这里指的是两个不同的
视图
名称?另外,我们包含的类型在URL中可见,这看起来很糟糕,编辑了关于我如何传递
名称的问题请注意,这样就传递了
ABC
ABCPlus
,整个事情就变成了答案中提到的那样!!这就是真正的代码吗?因为调用
navTo
routerpath
不应该在引号内,所以问题仍然是一样的。调用navTo时,哈希将设置为
spec/ABCPlus/add
(路由器知道如何构建散列,因为你给了他路由的名称)。然后路由器忘记了一切(包括路由的名称),并尝试将新的散列与现有路由进行匹配。然后它将看到“啊,模式
spec/{name}/{Action}
”匹配此新哈希,其路由的名称为
abcsspecificationnew
(因为您首先定义了该路由)。您必须使您的模式唯一。
"routes": [
    {
        "pattern": "spec/ABC/{Action}",
        "name": "ABCSpecificationNew",
        "target": "ABCSpecificationNew"
    }, {
        "pattern": "spec/ABCPlus/{Action}",
        "name": "ABCPlusSpecificationNew",
        "target": "ABCPlusSpecificationNew"
    },
    .....
],