web-dev-qa-db-ja.com

sapui5 / openui5でJSONModel.loadData()リクエストを待つ方法

SapUI5/openUI5には、サーバーからのファイルを入力したJSONModelがあります。

_var oModel = new JSONModel();
oModel.loadData("http://127.0.0.1/data/config.json");
console.log(JSON.stringify(oModel.getData()));
_

リクエストは非同期であるため、コンソールは空のoModelをログに記録します。

データがロードされた後にconsole.log()が呼び出されるように同期させるにはどうすればよいですか?

7
Benvorth

同期ajaxリクエストの使用は、UIをブロックし、コンソールに警告が表示される可能性があるため、お勧めしません。

Model.requestCompleted 非同期にロードされたデータにアクセスするイベント:

oModel.attachRequestCompleted(function() {
        console.log(oModel.getData());
    });
15
schnoedel

探しているキーワードは「Deferred」です-オブジェクト-> SAPUI5でAJAXリクエストを待つことができます。

SAPUI5コンテキストについてこれを確認してください: SAPUI5 Deferred-Objectを待つ//。done()関数を待つ

3
dotchuZ

モデルからattachRequestCompleted-listenerを使用できます [1]

model.attachRequestCompleted(function(){
    console.log(this.getData()); //"this" is the model
});

使用する別の関数は

$.get(url, function(response){
    console.log(response);
    model.setData(response);
});
// or
$.ajax(url, {
    success: function(){
        console.log(response);
        model.setData(response);
    }
});

これには、jQuery.ajaxが受け入れるすべての設定でリクエストを構成できるという利点があります [2]

0
herrlock