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"
},
.....
],