SAP Open UI5 - attachRequestCompleted中的调用函数

时间:2016-11-10 15:23:08

标签: javascript callback sap sapui5

我对SAP Open UI5中的attachRequestCompleted有疑问。

我的代码看起来像这样:

test : function (oEvent) {
                model = new sap.ui.model.json.JSONModel();
                // Load JSON in model
                model.loadData("http://localhost:8080/getJSON");

                model.attachRequestCompleted( function(){
                    console.log(model.getData());
                    this.makeSomething()
                });
        },

我想在模型加载后调用我的函数makeSomething,但这是不可能的。

我尝试在这样的函数之后调用它。调用该函数但未加载模型。

test : function (oEvent) {
                model = new sap.ui.model.json.JSONModel();
                // Load JSON in model
                model.loadData("http://localhost:8080/getJSON");

                model.attachRequestCompleted( function(){
                    console.log(model.getData());
                }, this.checkElement());
        },

这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

JavaScript中的 this 关键字非常棘手。正如W3schools所说here

  

在JavaScript中,称之为的东西是"拥有的对象" JavaScript代码。

     

当在函数中使用时,它的值是"拥有的对象"功能。

     

当在对象中使用时,它的值是对象本身。

     

对象构造函数中的this关键字没有值。它只是新对象的替代品。

     

当构造函数用于创建对象时,this的值将成为新对象。

在您的情况下,如果您在测试方法中调用将引用当前控制器。您可以在方法中使用 this 来访问控制器的其他方法。

但是,如果您在回调方法中使用,则 - 代码的所有者 - 不再是控制器。这是你的回调方法。 this.makeSomething()不存在。

通常的方法是创建一个通常称为 的变量,在此时,您将 的值赋予该值>具有您稍后要访问的值。然后您可以从回调方法访问它;在回调方法中,那个变量不会改变,而这个会有所不同。

代码示例胜过千言万语。请参阅下面的更改。

test : function (oEvent) {
    var that = this;
    model = new sap.ui.model.json.JSONModel();
    // Load JSON in model
    model.loadData("http://localhost:8080/getJSON");

    model.attachRequestCompleted( function(){
        console.log(model.getData());
        that.makeSomething();
    });
},

使用UI5时,我通常会创建一个与我的控制器方法相同级别的变量,名为 _globalThis 。在 onInit 方法中,然后我为其分配 this 的值,然后可以从我的每个回调方法中访问该变量。