Uncaught TypeError: Cannot read property 'oTargetControl' of undefined
Uncaught TypeError: Cannot read property 'oTargetControl' of undefined
加载我的应用程序时,我收到此错误:
Uncaught TypeError: Cannot read property 'oTargetControl' of undefined"
我正在使用路由配置(这是 SAPui5 应用程序)。
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewType": "XML",
"viewPath": "myNav.view",
"controlId": "app",
"controlAggregation": "pages"
},
"routes": [{
"pattern": "",
"name": "first",
"target": "first"
}, {
"pattern": "",
"name": "second",
"target": "second"
}],
"targets": {
"first": {
"viewName": "First"
},
"second": {
"viewName": "Second"
}
}
}
我的Component.js密码是
UIComponent.prototype.init.apply(this, arguments);
this.setModel(models.createDeviceModel(), "device");
this.getRouter().initialize();
这是一个简单的导航示例,我有两个视图(第一个视图和第二个视图)。
我该如何解决这个问题?
您的 2 条路线具有相同的模式。在空散列 (pattern="") 的情况下,您希望匹配哪些路由?我想这是导致问题的原因。要么确保你有不同的模式,要么使用底层库 crossroads.js
支持的 greedy 特性
您是否指定了根视图?
您为路由指定了 controlId 'app' 和 controlAggregation 'pages'。这意味着您的路由器将搜索 ID 为 'app' 的控件,并将尝试用匹配的路由替换此控件的聚合 'pages'。
我猜 oTargetControl
是未找到的控件 'app',这就是错误发生的原因。
……像这样应该进入你的应用程序配置:
"rootView": "my.app.Root"
其次,正如 Nabi 已经提到的,路由严格按照先匹配先服务的方式工作,这意味着您的视图 Second 将永远不会被使用。您要么必须调整模式,要么使用贪心标志。
见https://sapui5.hana.ondemand.com/sdk/#docs/guide/cf3c57c89ef0491793d1ce327ab4f9b2.html
在我的例子中,我添加了 "async" : true 属性 到 routing
`
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewType": "XML",
"viewPath": "sap.sapx5Exercise03_1.view",
"controlId": "menu",
"targetControl" : "app",
"transition": "slide",
"controlAggregation": "pages",
"bypassed": {
"target": "notFound"
},
"async" : true
},
`……
并记住 "controlId":"menu",属性 的值应该在您的视图中
`
<mvc:View xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" controllerName="sap.sapx5Exercise03_1.controller.Menu"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:app="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1"
>
<App id="menu">
`......
加载我的应用程序时,我收到此错误:
Uncaught TypeError: Cannot read property 'oTargetControl' of undefined"
我正在使用路由配置(这是 SAPui5 应用程序)。
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewType": "XML",
"viewPath": "myNav.view",
"controlId": "app",
"controlAggregation": "pages"
},
"routes": [{
"pattern": "",
"name": "first",
"target": "first"
}, {
"pattern": "",
"name": "second",
"target": "second"
}],
"targets": {
"first": {
"viewName": "First"
},
"second": {
"viewName": "Second"
}
}
}
我的Component.js密码是
UIComponent.prototype.init.apply(this, arguments);
this.setModel(models.createDeviceModel(), "device");
this.getRouter().initialize();
这是一个简单的导航示例,我有两个视图(第一个视图和第二个视图)。
我该如何解决这个问题?
您的 2 条路线具有相同的模式。在空散列 (pattern="") 的情况下,您希望匹配哪些路由?我想这是导致问题的原因。要么确保你有不同的模式,要么使用底层库 crossroads.js
支持的 greedy 特性您是否指定了根视图?
您为路由指定了 controlId 'app' 和 controlAggregation 'pages'。这意味着您的路由器将搜索 ID 为 'app' 的控件,并将尝试用匹配的路由替换此控件的聚合 'pages'。
我猜 oTargetControl
是未找到的控件 'app',这就是错误发生的原因。
……像这样应该进入你的应用程序配置:
"rootView": "my.app.Root"
其次,正如 Nabi 已经提到的,路由严格按照先匹配先服务的方式工作,这意味着您的视图 Second 将永远不会被使用。您要么必须调整模式,要么使用贪心标志。
见https://sapui5.hana.ondemand.com/sdk/#docs/guide/cf3c57c89ef0491793d1ce327ab4f9b2.html
在我的例子中,我添加了 "async" : true 属性 到 routing
`
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewType": "XML",
"viewPath": "sap.sapx5Exercise03_1.view",
"controlId": "menu",
"targetControl" : "app",
"transition": "slide",
"controlAggregation": "pages",
"bypassed": {
"target": "notFound"
},
"async" : true
},
`…… 并记住 "controlId":"menu",属性 的值应该在您的视图中
`
<mvc:View xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" controllerName="sap.sapx5Exercise03_1.controller.Menu"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:app="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1"
>
<App id="menu">
`......