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”)


    谢谢!我在这里发现了类似的东西: