SAPUI5新手导航至详情视图遇TypeError: oRouter.getRoute(...)未定义求助
解决SAPUI5中
TypeError: oRouter.getRoute(...) is undefined的问题 嘿,作为SAPUI5新手碰到这个问题太正常了,我来帮你捋捋可能的原因和解决办法!
这个错误本质上是说你要么没正确拿到路由器实例,要么目标路由根本没在应用里配置,或者就是路由名称拼写错了——咱一步步排查:
第一步:先确保正确获取路由器实例
在SAPUI5里,正确的路由器获取方式是从当前控制器所属的组件实例里拿,别直接用全局方式调用。你可以在控制器里这样写:
var oRouter = this.getOwnerComponent().getRouter();
第二步:检查manifest.json的路由配置
你得先确认在应用的manifest.json里,已经给第二个视图(对象详情页)定义好了路由。举个例子,如果你的详情视图叫AirportDetail,配置大概是这样的:
"sap.ui5": { // ...其他配置 "routing": { "config": { "routerClass": "sap.m.routing.Router", "viewType": "XML", "viewPath": "你的应用命名空间.views", // 替换成你实际的命名空间 "controlId": "app", // 对应你页面里sap.m.App/sap.m.SplitApp的ID "controlAggregation": "pages" }, "routes": [ { "name": "Airport", "pattern": "", "target": "Airport" }, { "name": "AirportDetail", // 这个就是你要导航的路由名称,要记准! "pattern": "airport/{airportId}", // 可以传递参数,比如详情页需要的ID "target": "AirportDetail" } ], "targets": { "Airport": { "viewName": "Airport" }, "AirportDetail": { "viewName": "AirportDetail" } } } }
第三步:完善列表项的press导航逻辑
现在把你控制器里的代码补全,确保press事件能正确触发路由导航:
onInit: function() { jQuery.sap.require("sap.m.ObjectAttribute"); jQuery.sap.require("sap.m.MessageBox"); var oList = this.getView().byId("List01"); var oRouter = this.getOwnerComponent().getRouter(); // 先拿到路由器实例 oList.bindItems({ path: "JSON>/products", template: new sap.m.StandardListItem({ type: "Navigation", title: "{JSON>fields/aeroport}", press: function(oEvent) { // 获取点击的列表项和绑定的数据上下文 var oClickedItem = oEvent.getSource(); var oItemContext = oClickedItem.getBindingContext("JSON"); // 拿到详情页需要的对象ID(替换成你实际的字段名) var sTargetId = oItemContext.getProperty("fields/airportId"); // 导航到详情路由,同时传递参数 oRouter.navTo("AirportDetail", { airportId: sTargetId }); } }) }); }
最后几个要注意的点
- 路由名称是大小写敏感的,别把
AirportDetail写成airportdetail或者其他拼写错误 - 确认页面里的App控件ID和
manifest.json里controlId完全一致 - 如果是比较老的SAPUI5版本,可能需要在组件的
init方法里手动初始化路由,但现在新版本只要在manifest里配置就会自动生效
内容的提问来源于stack exchange,提问作者mathieu ka
相关产品推荐
相关产品推荐

