SAP Fiori 1.60.38路由异常:跳转Finalizados却进入Detail视图
本人使用SAP Fiori 1.60.38版本,Worklist与Detail视图可正常双向跳转。新增Finalizados视图后,需在满足特定条件时从Worklist跳转至该视图,但调用navTo("finalizados")后,却进入了Detail.controller,且"finalizados"被当作参数传入。期望参数能正确传入Finalizados.controller,相关代码如下:
现有manifest.json路由配置
"routing": { "config": { "routerClass": "sap.m.routing.Router", "viewType": "XML", "viewPath": "com.ui5.apps.fg_recepciones.view", "controlId": "app", "controlAggregation": "pages", "bypassed": { "target": [ "notFound" ] }, "async": true }, "routes": [ { "pattern": "", "name": "worklist", "target": [ "worklist" ] }, { "pattern": "detail/{objectId}|{idExterno}|{tipo}|{Entrega}", "name": "detail", "target": [ "detail" ] }, { "pattern": "finalizados/{objectId}|{idExterno}|{tipo}|{Entrega}", "name": "finalizados", "target": [ "finalizados" ] } ], "targets": { "worklist": { "viewName": "Worklist", "viewId": "worklist", "title": "{i18n>worklistViewTitle}", "viewLevel": 1 }, "detail": { "viewName": "Detail", "viewId": "detail", "title": "{i18n>objectViewTitle}", "viewLevel": 2 }, "finalizados": { "viewName": "Finalizados", "viewId": "finalizados", "title": "Finalizados", "viewLevel": 2 }, "objectNotFound": { "viewName": "ObjectNotFound", "viewId": "objectNotFound" }, "notFound": { "viewName": "NotFound", "viewId": "notFound" } } },
Worklist.controller.js跳转逻辑
if (clase === "Recepcionados") { var destiny = "finalizados"; } else { destiny = "detail"; } tipo = tipo + clase; this.getRouter().navTo(destiny, { objectId: item.Pedido, tipo: tipo, idExterno: idExterno, Entrega: entrega });
问题原因
- 路由pattern语法错误:你在pattern中使用
|分隔参数,这是错误写法。UI5路由的pattern里,|是正则表达式的"或"运算符,导致detail/{objectId}|{idExterno}会被解析为匹配detail/xxx或者直接匹配xxx。当跳转finalizados/xxx时,finalizados会被detail路由的{idExterno}参数捕获,从而触发Detail视图。 - 路由匹配顺序:UI5路由按数组从上到下匹配,detail路由在finalizados前面,错误的pattern导致优先匹配到detail路由。
修复方案
修正路由pattern的参数分隔符为/(UI5路由标准的参数分隔方式),同时建议将finalizados路由放在detail路由前面(避免后续潜在的匹配冲突):
"routes": [ { "pattern": "", "name": "worklist", "target": [ "worklist" ] }, { "pattern": "finalizados/{objectId}/{idExterno}/{tipo}/{Entrega}", "name": "finalizados", "target": [ "finalizados" ] }, { "pattern": "detail/{objectId}/{idExterno}/{tipo}/{Entrega}", "name": "detail", "target": [ "detail" ] } ],
修改后,调用navTo("finalizados", {...参数})时,路由会正确匹配到Finalizados视图,参数也会正常传入Finalizados.controller的patternMatched事件中。
内容的提问来源于stack exchange,提问作者Cristian López González
相关产品推荐
相关产品推荐

