Javascript 与“范围”相关的问题;这一点;对象引用:Can';onInit中的t访问模型
我在理解代码中Javascript 与“范围”相关的问题;这一点;对象引用:Can';onInit中的t访问模型,javascript,sapui5,Javascript,Sapui5,我在理解代码中此引用的更改时遇到问题。所以有三件事我不明白: 当我尝试在onInit中获取我的模型时,我得到: “无法读取未定义的属性'getProperty'。” 但是我可以在XML视图中访问视图的模型,因为我在manifest.json中定义了模型,并在我的应用程序组件中使用了manifest。为什么我不能通过this.getView().getModel访问控制器中的模型 在我的onDetailRouteHit方法中,我可以使用this.getView().getModel获得完美的模型
此
引用的更改时遇到问题。所以有三件事我不明白:
onInit
中获取我的模型时,我得到:
“无法读取未定义的属性'getProperty'。”
但是我可以在XML视图中访问视图的模型,因为我在manifest.json中定义了模型,并在我的应用程序组件中使用了manifest。为什么我不能通过this.getView().getModel
访问控制器中的模型onDetailRouteHit
方法中,我可以使用this.getView().getModel
获得完美的模型\u Test
方法时,再次出现此错误:
“无法读取未定义的属性'getProperty'”
onInit
中访问模型,而不能在onDetailRouteHit
中访问模型呢?为什么我可以在onDetailRouteHit
中访问它,而不能在之后调用的函数中访问它?我已经习惯了Java,这个
引用当前对象,我假设它是我在示例中当前所在的控制器
JS/UI5中是否有这个范围的“规则”
sap.ui.define([
“sap/ui/core/mvc/Controller”
],功能(控制器){
“严格使用”;
返回Controller.extend(“test.Controller.Detail”{
onInit:function(){
var array1=this.getView().getModel(“myData”).getProperty(“/myDataSet”);
this.oRouter=this.getOwnerComponent().getRouter();
this.oRouter.getRoute(“detail”).attachPatternMatched(this.\u onDetailRouteHit.bind(this));
},
_onDetailRouteHit:功能(oEvent){
var array2=this.getView().getModel(“myData”).getProperty(“/myDataSet”);
这个;
},
_测试:函数(){
var array3=this.getView().getModel(“myData”).getProperty(“/myDataSet”);
}
});
});
退房。它解释了这一点
因此,基本上,它可以有一个不同的含义,根据您的对象和范围
现在进入3个函数
- 在onInit中,您的视图尚未实例化,因此此.getView()返回null
在第二个met中,视图已实例化,这是到控制器的直接链接。因此它会得到一个返回对象,它是您的视图,因为您的控制器可以访问它的视图
您的最后一个案例让我感到惊讶,因为我本以为该函数能够访问视图。如果没有,则应该比较调试器中的“this”对象,看看它的引用是什么。this.getView().getModel(“myData”)
在onInit中返回未定义的,因为此时视图与父对象没有关联。请查看文档中的内容。它说:
控制器的初始化功能被执行-->路由器将视图放置在根控件中:模型现在在视图及其控制器中可用
如果您希望从更高层次结构(例如组件模型)访问onInit中的模型,则需要明确获取该模型所有者的引用,然后从中调用getModel
:this.getOwnerComponent().getModel(“myData”)
→ 谢谢!我在这里发现了类似的东西: