2016-11-10 49 views
0

我有一個關於在SAP Open UI5中的attachRequestCompleted的問題。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

這個 JavaScript中的關鍵字很棘手。正如W3schools的here

在JavaScript中,稱爲this的東西是「擁有」JavaScript代碼的對象。

當在函數中使用時,這個值是「擁有」函數的對象。

當在對象中使用時,其值是對象本身。

對象構造函數中的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方法中,我然後將它分配給這個的值,然後可以從我的每個回調方法訪問同一個變量。

+0

非常感謝您的回答和解答!用var _globalThis的想法非常好! – Godlike