Sapui5 getOwnerComponent()返回按需嵌入视图的控制器中未定义的值

Sapui5 getOwnerComponent()返回按需嵌入视图的控制器中未定义的值,sapui5,Sapui5,如果满足某些要求,我想在根视图中嵌套第二个视图。通过创建一个XMLView对象并将其添加到元素的聚合中,可以很好地实现这一点。但是当我试图通过this.getOwnerComponent().getModel()访问默认模型(由manifest.json文件创建)时,它抛出: 未捕获的TypeError:无法读取未定义的属性“getModel” 它在根控制器中工作,但在嵌套控制器中,this.getOwnerComponent()再次返回了undefined 如果在根视图的开头添加视图,它甚至可

如果满足某些要求,我想在根视图中嵌套第二个视图。通过创建一个XMLView对象并将其添加到
元素的
聚合中,可以很好地实现这一点。但是当我试图通过
this.getOwnerComponent().getModel()
访问默认模型(由
manifest.json
文件创建)时,它抛出:

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

它在根控制器中工作,但在嵌套控制器中,
this.getOwnerComponent()
再次返回了
undefined

如果在根视图的开头添加视图,它甚至可以工作。也许我在控制器中以错误的方式将其添加到视图中


RootView.view.xml:


RootView.controller.js:

sap.ui.define([
“sap/ui/core/mvc/Controller”,
“sap/ui/core/mvc/XMLView”
],函数(控制器,XMLView){
“严格使用”;
返回Controller.extend(“test.demo.Controller.RootView”{
onload按钮按:函数(){
this.mDefault=this.getOwnerComponent().getModel();//工作正常
警报(this.mDefault);
XMLView.create({
viewName:“test.demo.view.NestedView”
}).然后(功能(oView){
此.byId(“页面”).addContent(oView);
}.约束(这个);
}
});
});
NestedView.view.xml:


NestedView.controller.js:

sap.ui.define([
“sap/ui/core/mvc/Controller”
],功能(控制器){
“严格使用”;
返回Controller.extend(“test.demo.Controller.NestedView”{
onInit:function(){
this.mDefault=this.getOwnerComponent().getModel();//抛出未捕获的类型错误:this.getOwnerComponent()未定义
警报(this.mDefault);
}
});
});
manifest.json
中,我添加了
GWSAMPLE\u BASIC
OData服务作为默认模型。

在JS上下文中创建视图(或任何其他元素)时,应该在
sap.ui.core.Component
中的方法中完成。例如:

onload按钮按:异步函数(){
const fn=()=>XMLView.create({viewName:“test.demo.view.NestedView”});
const oView=wait this.getOwnerComponent().runAsOwner(fn);
此.byId(“页面”).addContent(oView);
},
发件人:

根据API参考:

对象的所有权仅在创建对象时由框架检查。之后不会对其进行检查或更新。只有在执行
组件.runAsOwner
功能时才能检测到它。如果不采取进一步措施,则只有在构造UIComponent的内容或路由器创建新视图及其内容时才会出现这种情况

然后在嵌套视图的控制器中,调用
this.getOwnerComponent()
应该返回组件,而不是
未定义的
,因此调用
this.getOwnerComponent().getModel()
也应该起作用。

在JS上下文中创建视图(或任何其他元素)时,它应该在
sap.ui.core.Component
中的方法中完成。例如:

onload按钮按:异步函数(){
const fn=()=>XMLView.create({viewName:“test.demo.view.NestedView”});
const oView=wait this.getOwnerComponent().runAsOwner(fn);
此.byId(“页面”).addContent(oView);
},
发件人:

根据API参考:

对象的所有权仅在创建对象时由框架检查。之后不会对其进行检查或更新。只有在执行
组件.runAsOwner
功能时才能检测到它。如果不采取进一步措施,则只有在构造UIComponent的内容或路由器创建新视图及其内容时才会出现这种情况


然后在嵌套视图的控制器中,调用
this.getOwnerComponent()
应该返回组件,而不是
undefined
,因此调用
this.getOwnerComponent().getModel()
也应该有效。

关于
this.byId
在press处理程序中抛出错误:这是另一个问题。将事件处理程序分配给JS中的控件时,还需要传递上下文(侦听器)以及数组中的第二项:
press:[this.onLoadButtonPress,this]
。关于
this.byId
在press处理程序中引发错误:这是另一个问题。将事件处理程序分配给JS中的控件时,还需要传递上下文(侦听器)以及数组中的第二项:
按:[this.onLoadButtonPress,this]
。解决了我的问题。谢谢解决了我的问题。谢谢