路由到相同的“模式”但具有不同的“参数”、“名称”和“目标”
Routing to the same `pattern` but with different `args` ,`name` and `targets`
我想做的是,路由中的 pattern
相同,但 target
和 name
不同:
"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
被传递给 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}"
这样的单一模式和一个额外的参数,这将帮助你决定你想要渲染的视图类型 ABCSpecificationConfigurationNew
或 ABCplusSpecificationConfigurationNew.
模式
"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}
。 ABC
、ABCPlus
、DEF
、CHEESE_NUGGETS
,随你便。
匹配时,路由器会使用它找到的第一个目标。在你的情况下 ABCSpecificationNew
.
如果您只想支持 ABC
和 ABCPlus
这两个名称,我建议如下:
"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
。
我想做的是,路由中的 pattern
相同,但 target
和 name
不同:
"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
被传递给 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}"
这样的单一模式和一个额外的参数,这将帮助你决定你想要渲染的视图类型 ABCSpecificationConfigurationNew
或 ABCplusSpecificationConfigurationNew.
模式
"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}
。 ABC
、ABCPlus
、DEF
、CHEESE_NUGGETS
,随你便。
匹配时,路由器会使用它找到的第一个目标。在你的情况下 ABCSpecificationNew
.
如果您只想支持 ABC
和 ABCPlus
这两个名称,我建议如下:
"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
。