You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:45:08