Javascript 如何知道所有odata调用在屏幕上完成?

Javascript 如何知道所有odata调用在屏幕上完成?,javascript,jquery,sapui5,sap-fiori,Javascript,Jquery,Sapui5,Sap Fiori,我在一个屏幕上有多个odata调用,它们不在批处理调用中。我想在所有调用完成后触发一个事件。如何操作?您可以使用sap.ui.model.odata.v2.ODataModel的事件batchRequestCompleted(oControlEvent)。从文档中可以看出:batchRequestCompleted事件在请求完成后(包括接收响应)被触发,无论请求是否成功 将以下代码添加到您的模型中,每次模型完成请求时都会调用这些代码 this.getView().getModel().attac

我在一个屏幕上有多个odata调用,它们不在批处理调用中。我想在所有调用完成后触发一个事件。如何操作?

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


将以下代码添加到您的模型中,每次模型完成请求时都会调用这些代码


this.getView().getModel().attachRequestCompleted(函数(){console.log(“complete!”);})

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

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

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

     <Table headerText="tab3"
        updateFinished="onTableUpdate"
        items="{/Collection}"...      
您需要一个方法,在每个表完成更新时将这些标志设置为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的控件,以了解所有调用是否已完成是一件棘手的事情。您使用的是表格还是列表?如果是的话,那么有一种方法我在屏幕上主要有表格。比如说,我有5个表,在一个屏幕上读取来自5个不同实体集的数据。有5个不同的odata电话在呼叫他们。那我怎么知道所有的电话都打完了?我没有一个电话。
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
        ...
    }