路线和Targin错误:无法读取未定义的属性'getPath'

2020-09-24 12:05发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好社区,当我要遍历读取的参数进行路由时出现错误,但我找不到问题所在

ListInvoice.controller.js?eval:38未捕获的TypeError:无法读取未定义的属性'getPath'

这是我的代码

清单

"路由":{
 " config":{
 " routerClass":" sap.m.routing.Router",
 " viewType":" XML",
 " viewPath":" kauf.databinding.app.view",
 " controlId":" apx",
 " controlAggregation":"页面",
 "异步":true
 },
 "路线":[
 {
 " pattern":"",
 " name":" main",
 " target":" main"
 },
 {
 " pattern":" detail/{invoicePath}",
 " name":"详细信息",
 " target":"详细信息"
 }
 ],
 "目标":{
 "主要":{
 " viewID":" main",
 " viewName":"主要"
 },
 "详细信息":{
 " viewId":"详细信息",
 " viewName":"详细信息"
 }
 }
 }
 

Component.js

 sap.ui.define([
    " sap/ui/core/UIComponent"
 ],函数(UIComponent,JSONModel){
    "使用严格";
    返回UIComponent.extend(" kauf.databinding.app.Component",{

 元数据:{
            清单:" json"
      },

       初始化:函数(){
         //调用父级的init函数
          UIComponent.prototype.init.apply(this,arguments);
         
         //根据url/hash创建视图
 this.getRouter()。initialize();


 }
    });
 });
 

我正在调用路线明细的列表发票,我已经将其添加到了一个对象列表项中

type =" Navigation" press =" onPress"

listinvoice.view

 


 /发票",
       分类器:{
       路径:" ShipperName",
       降序:false,
       组:真实
       }
       }">
      
       
       <工具栏标题=" {i18n> invoiceListTitle}">
       
       
 
       

 <项目>
 
 
 状态",
 formatter:'.formatter.statusText'}"/> <!-un"。" delante del formatter具有实际意义,而实际的控制权->
 
 
 

 



 
 

listinvoice.controller

 sap.ui.define([
 " sap/ui/core/mvc/Controller",
 " sap/ui/model/json/JSONModel",
 " kauf/databinding/app/model/formatter",
 " sap/ui/model/Filter",
 " sap/ui/model/FilterOperator",
 " sap/m/MessageToast"
 ],函数(控制器,JSONModel,格式化程序,过滤器,FilterOperator,MessageToast){
 "使用严格";

 返回Controller.extend(" kauf.databinding.app.controller.ListInvoice",{

 formatter:formatter,////远景不可见

 onInit:function(){
 var oViewModel = new JSONModel({
 货币:" EUR"
 });
 this.getView()。setModel(oViewModel," view");
 },

 onBuscarFiltro:函数(oEvent){
 var oArray = [];
 var sQuery = oEvent.getParameter(" query");
 如果(sQuery){
 oArray.push(new Filter(" ProductName",FilterOperator.Contains,sQuery));
 }

 var oList = this.byId(" listaInvo");
 var oBinding = oList.getBinding(" items");
 oBinding.filter(oArray);
 },
 onPress:函数(oEvent){
 var oItem = oEvent.getSource();
 var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
 oRouter.navTo(" detail",{
 invoicePath:oItem.getBindingContext(" invoice")。getPath()。substr(1)
 });
 }
 });
 });
 

所以在我的detail.controller中,我有这个,我的detail.view中只有一个带有硬代码的文本

 sap.ui.define([
 " sap/ui/core/mvc/Controller"
 ],函数(控制器){
 "使用严格";
 return Controller.extend(" kauf.databinding.app.controller.Detail",{
 onInit:函数(){
 var oRouter = sap.ui.core.UIComponent.getRouterFor(this); //Traemos la instancia del router" app"
 oRouter.getRoute(" detail")。attachPatternMatched(this._onObjectMatched,this); //y lo ligamos沿路线"详细" con attachPatternMatched
//沿路线进行accedimos por el nombre注册
//功能性国际舞曲
 },

 _onObjectMatched:function(oEvent){//接收参数并接受参数设置
 this.getView()。bindElement({////清单路径清单列表中的控制列表,视图绑定和上下文绑定表
 路径:"/" + oEvent.getParameter(" arguments")。invoicePath,//列表中的清单/清单
 型号:"发票"
 });
 }
 });
 });
 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好社区,当我要遍历读取的参数进行路由时出现错误,但我找不到问题所在

ListInvoice.controller.js?eval:38未捕获的TypeError:无法读取未定义的属性'getPath'

这是我的代码

清单

"路由":{
 " config":{
 " routerClass":" sap.m.routing.Router",
 " viewType":" XML",
 " viewPath":" kauf.databinding.app.view",
 " controlId":" apx",
 " controlAggregation":"页面",
 "异步":true
 },
 "路线":[
 {
 " pattern":"",
 " name":" main",
 " target":" main"
 },
 {
 " pattern":" detail/{invoicePath}",
 " name":"详细信息",
 " target":"详细信息"
 }
 ],
 "目标":{
 "主要":{
 " viewID":" main",
 " viewName":"主要"
 },
 "详细信息":{
 " viewId":"详细信息",
 " viewName":"详细信息"
 }
 }
 }
 

Component.js

 sap.ui.define([
    " sap/ui/core/UIComponent"
 ],函数(UIComponent,JSONModel){
    "使用严格";
    返回UIComponent.extend(" kauf.databinding.app.Component",{

 元数据:{
            清单:" json"
      },

       初始化:函数(){
         //调用父级的init函数
          UIComponent.prototype.init.apply(this,arguments);
         
         //根据url/hash创建视图
 this.getRouter()。initialize();


 }
    });
 });
 

我正在调用路线明细的列表发票,我已经将其添加到了一个对象列表项中

type =" Navigation" press =" onPress"

listinvoice.view

 


 /发票",
       分类器:{
       路径:" ShipperName",
       降序:false,
       组:真实
       }
       }">
      
       
       <工具栏标题=" {i18n> invoiceListTitle}">
       
       
 
       

 <项目>
 
 
 状态",
 formatter:'.formatter.statusText'}"/> <!-un"。" delante del formatter具有实际意义,而实际的控制权->
 
 
 

 



 
 

listinvoice.controller

 sap.ui.define([
 " sap/ui/core/mvc/Controller",
 " sap/ui/model/json/JSONModel",
 " kauf/databinding/app/model/formatter",
 " sap/ui/model/Filter",
 " sap/ui/model/FilterOperator",
 " sap/m/MessageToast"
 ],函数(控制器,JSONModel,格式化程序,过滤器,FilterOperator,MessageToast){
 "使用严格";

 返回Controller.extend(" kauf.databinding.app.controller.ListInvoice",{

 formatter:formatter,////远景不可见

 onInit:function(){
 var oViewModel = new JSONModel({
 货币:" EUR"
 });
 this.getView()。setModel(oViewModel," view");
 },

 onBuscarFiltro:函数(oEvent){
 var oArray = [];
 var sQuery = oEvent.getParameter(" query");
 如果(sQuery){
 oArray.push(new Filter(" ProductName",FilterOperator.Contains,sQuery));
 }

 var oList = this.byId(" listaInvo");
 var oBinding = oList.getBinding(" items");
 oBinding.filter(oArray);
 },
 onPress:函数(oEvent){
 var oItem = oEvent.getSource();
 var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
 oRouter.navTo(" detail",{
 invoicePath:oItem.getBindingContext(" invoice")。getPath()。substr(1)
 });
 }
 });
 });
 

所以在我的detail.controller中,我有这个,我的detail.view中只有一个带有硬代码的文本

 sap.ui.define([
 " sap/ui/core/mvc/Controller"
 ],函数(控制器){
 "使用严格";
 return Controller.extend(" kauf.databinding.app.controller.Detail",{
 onInit:函数(){
 var oRouter = sap.ui.core.UIComponent.getRouterFor(this); //Traemos la instancia del router" app"
 oRouter.getRoute(" detail")。attachPatternMatched(this._onObjectMatched,this); //y lo ligamos沿路线"详细" con attachPatternMatched
//沿路线进行accedimos por el nombre注册
//功能性国际舞曲
 },

 _onObjectMatched:function(oEvent){//接收参数并接受参数设置
 this.getView()。bindElement({////清单路径清单列表中的控制列表,视图绑定和上下文绑定表
 路径:"/" + oEvent.getParameter(" arguments")。invoicePath,//列表中的清单/清单
 型号:"发票"
 });
 }
 });
 });
 

付费偷看设置
发送
6条回答
小c菟菟
1楼-- · 2020-09-24 12:25
给我看一下View ListInvoice的代码
SKY徐
2楼-- · 2020-09-24 12:16

VIEW,而不是控制器……花花公子

是的,正如Jun所说,我们需要 查看您的查看代码。 看来您控制器中的代码(listinvoice.controller)与SAPUI5" Walk-through"教程的代码相似/相同……大约类似于步骤33。 该代码取决于分配了"发票"模型的视图,因此它可以在该模型中找到所选表项的位置/路径(即getBindingContext(" invoice")。getPath()。substr(1))。 。

渐行渐远_HoldOn
4楼-- · 2020-09-24 12:43

我将名称模型更改为invoiceold并在视图中进行了引用,现在这是我在listtinvoce.controller上的代码

 onPress:函数(oEvent){
 var sPath = oEvent.getSource()。getBindingContext(" invoiceold")。getPath();
 var oItem = this.getView()。getModel(" invoiceold")。getProperty(sPath);
 var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
 oRouter.navTo(" detail",{invoicePath:sPath()。substr(1)});
 
蓋茨
5楼-- · 2020-09-24 12:28

您已假定ListInvoice控制器中的这一行代码

 var oItem = oEvent.getSource(); 

给您物品。 那是不正确的。

首先获取路径,然后获取映射到该路径的对象(oItem):

 var sPath = oEvent.getSource()。getBindingContext(" invoice")。getPath();
 var oItem = this.getModel(" invoice")。getProperty(sPath); //在您的代码中,您似乎并不需要这个

//如果您愿意,可以使用任何字段的值导航到详细信息
//在您的详细信息控制器(而不是路径)中处理了此问题(例如发票编号)

您的导航应如下所示:

 oRouter.navTo(" detail",{invoicePath:sPath()。substr(1)}); 
SKY徐
6楼-- · 2020-09-24 12:33

我遇到了一个错误:sPath不是函数

这是我根据您的建议修改的代码:

 var sPath = oEvent.getSource()。getBindingContext(" invoiceold")。getPath();
 var oItem = this.getView()。getModel(" invoiceold")。getProperty(sPath);
 

一周热门 更多>