一旦所有odata通话都在屏幕上完成,怎么知道?

时间:2017-02-14 05:32:27

标签: javascript jquery sapui5 sap-fiori

我在一个屏幕上有多个odata呼叫,但它们不在批量呼叫中。我希望在所有调用完成后触发事件。我该怎么做?

3 个答案:

答案 0 :(得分:0)

您可以使用sap.ui.model.odata.v2.ODataModel的Event batchRequestCompleted(oControlEvent)。从文档中:在请求完成后(包括接收响应),无论请求是否成功,都会触发'batchRequestCompleted'事件。

https://sapui5.hana.ondemand.com/sdk/#docs/api/symbols/sap.ui.model.odata.v2.ODataModel.html#event:batchRequestCompleted

答案 1 :(得分:0)

将以下代码添加到模型中,每次模型完成请求时都会调用该代码。

this.getView().getModel().attachRequestCompleted(function(){console.log("complete!");});

答案 2 :(得分:0)

如果使用Tables,则可以使用updateFinished事件在每次读取完成时通知。

<Table headerText="tab1"
        updateFinished="onTableUpdate"
        items="{/Collection}"...

     <Table headerText="tab2"
        updateFinished="onTableUpdate"
        items="{/Collection}"...

     <Table headerText="tab3"
        updateFinished="onTableUpdate"
        items="{/Collection}"...      

要进行检查,您必须在初始化时保持标记

onInit: function () {
        this.oComplete = {
            "tab1" : false,
            "tab2" : false,
            "tab3" : false
        }

当每个表完成更新时,您将需要一个将这些标志设置为true的方法。

onTableUpdate: function(oEvent){
        var oTable= oEvent.getSource(),
            sText = oTable.getHeaderText();
        this.oComplete[sText] = true;
        //Check if all read's are complete
        if(this.oComplete["tab1"] && this.oComplete["tab2"] && this.oComplete["tab3"]){
            this._updateFinished();
        }

    },

    _updateFinished : function(){
        //Add you logic which should run after all call's complete
        ...
    }

一旦完成,将触发_updateFinished。

注意:updateFinished事件适用于扩展sap.m.ListBase

的所有控件