Sapui5 `这不是从JSView分配的事件处理程序中的控制器

Sapui5 `这不是从JSView分配的事件处理程序中的控制器,sapui5,Sapui5,我最近刚开始使用UI5,一直在处理视图之间的路由问题。我能够在两个XML视图之间进行路由&从XML视图到JS视图。但是,我无法离开JS视图 第一个视图已加载,但当路由到第二个视图时,控制台上的消息为: 未捕获的TypeError:无法读取未定义的属性“navTo” 方法sap.ui.core.UIComponent.getRouterFor(this)返回undefined Component.js: sap.ui.define([ “sap/ui/core/UIComponent”, “sap

我最近刚开始使用UI5,一直在处理视图之间的路由问题。我能够在两个XML视图之间进行路由&从XML视图到JS视图。但是,我无法离开JS视图

第一个视图已加载,但当路由到第二个视图时,控制台上的消息为:

未捕获的TypeError:无法读取未定义的属性“navTo”

方法
sap.ui.core.UIComponent.getRouterFor(this)
返回
undefined

Component.js:

sap.ui.define([
“sap/ui/core/UIComponent”,
“sap/ui/Device”,
“sapui5/app53/model/models”
],功能(组件、设备、型号){
“严格使用”;
返回UIComponent.extend(“sapui5.app53.Component”{
元数据:{
清单:“json”
},
init:function(){
UIComponent.prototype.init.apply(这是参数);
此.setModel(models.createDeviceModel(),“设备”);
这个.getRouter().initialize();
}
});
});
manifest.json的路由部分:

{
“配置”:{
“视图类型”:“JS”,
“视图路径”:“sapui5.app53.view”,
“targetControl”:“idPageContainer”,
“目标聚合”:“页面”,
“路由类”:“sap.m.routing.Router”
},
“路线”:[
{
“图案”:“图案”,
“名称”:“第一”,
“视图”:“zjs_视图_53_02”,
“目标聚合”:“页面”
},
{
“模式”:“第二”,
“名称”:“第二个”,
“视图”:“zjs_视图_53_03”,
“目标聚合”:“页面”
}
]
}
容器视图:

sap.ui.jsview(“sapui5.app53.view.zjs_view_53_01”{
getControllerName:函数(){
返回“sapui5.app53.controller.zjs_view_53_01”;
},
createContent:函数(oController){
此.setDisplayBlock(true);
返回新的sap.m.App(“idPageContainer”);
}
});
第一视图:

sap.ui.jsview(“sapui5.app53.view.zjs_view_53_02”{
getControllerName:函数(){
返回“sapui5.app53.controller.zjs_view_53_02”;
},
createContent:函数(oController){
var oButton=新的sap.m.按钮({
id:“idButton1”,
文本:“转到下一个视图”,
按:[oController.onNextView]
});
返回新的sap.m.Page({
标题:“标题页2”,
内容:[
奥布顿
]
});
}
});
第一视图的控制器:

sap.ui.controller(“sapui5.app53.controller.zjs_view_53_02”{
onNextView:function(){
var router=sap.ui.core.UIComponent.getRouterFor(this);
返回router.navTo(“Second”,null);//错误
}
});

我在容器视图中看到的是

return sap.m.App("id")
很可能这只是一个输入错误,但我想您需要返回一个新的sap.m.App:

return new sap.m.App("id")

更新:自UI5 v1.90以来,JS视图已被弃用。请改用


JSView
中,请记住在分配事件处理程序时始终传递侦听器对象(
oController
):

var oButton=new sap.m.按钮({
id:this.createId(“idButton1”),
文本:“转到下一个视图”,
按:[oController.onNextView,oController]
});
在处理程序中,
this
将成为您的控制器实例,允许从那里访问路由器



有关更多信息,请查看文档主题。

Hi@boghyon,在过去的两天里,我一直关注着各个网站上的所有博客、帖子和问题,但仍然无法找到答案。我在SCN和stackoverflow上发布了查询。SCN提供了相同的解决方案,这很有效。非常感谢您的帮助。@ChetanMishra没问题。我建议遵循文档。例如,主题说明:“在控件的事件处理程序中,
通常表示控件本身。[…]视图开发人员可以在数组中提供事件处理程序方法,其中第二个元素是
this
对象。”