刷新 SAPUI5 应用程序中的片段

Refresh Fragment in SAPUI5 Application

在我的 SAPUI5 应用程序中,我有一个 JS 片段 不会更新我的数据。如果我刷新 window 我会正确获取数据,但我需要使用 window.location.reload().

您可以查看下面的代码:

 onInit: function () {
            var oRouters = sap.ui.core.UIComponent.getRouterFor(this);
            oRouters.getRoute("chartContainer").attachPatternMatched(this._onObjectMatched, this);
        },
        _onObjectMatched: function (oEvent) {
            var sYear   = oEvent.getParameter("arguments").Year;
            var sMonth  = oEvent.getParameter("arguments").Month;
            var sGroup = oEvent.getParameter("arguments").Group;
            var sCurrency  = oEvent.getParameter("arguments").Currency;
             if (sYear === undefined && sMonth === undefined && sGroup === undefined && sCurrency === undefined){

                var oStartupParameters = this.getOwnerComponent().getComponentData().startupParameters;

                sYear   = oStartupParameters.Year;

                sMonth  = oStartupParameters.Month;

                sGroup = oStartupParameters.Group;

                sCurrency  = oStartupParameters.Currency


            }

            var sServiceUrl = "/sap/opu/odata/sap/Z_TEST/";
            var filterYear   = new sap.ui.model.Filter("Year",   sap.ui.model.FilterOperator.EQ, sYear);
            var filterMonth  = new sap.ui.model.Filter("Month",  sap.ui.model.FilterOperator.EQ, sMonth);
            var filterGroup = new sap.ui.model.Filter("Group", sap.ui.model.FilterOperator.EQ, sGroup);
            var filterCurrency  = new sap.ui.model.Filter("Currency",  sap.ui.model.FilterOperator.EQ, sCurrency);

            var oModelOdata = new sap.ui.model.odata.v2.ODataModel(sServiceUrl, {
                                                                          json: true,
                                                                          loadMetadataAsync: true
                                                                             });
            var oModel = new sap.ui.model.json.JSONModel();

            oModelOdata.read("/DataSet",{
                       filters: [filterYear, filterMonth, filterGroup, filterCurrency],
                       success: function(oData, response) {
                       var oResults = oData.results;
                       oModel.setData(oData);
                       var oView = sap.ui.getCore().byId("__xmlview0");
                       if (oView !== undefined){
                          oView.setModel(oModel);
                       }else{
                     
                           window.location.reload(); // It works correctly butI would like not to have to reload the whole page.

                     
                       }
                       }
                       });
       },

如何在不刷新整个页面的情况下刷新视图?

在此先感谢您的支持 塞尔吉奥

您应该使用 refresh() 方法刷新您的模型:

oModelOdata.read("/DataSet",{
  filters: [filterYear, filterMonth, filterGroup, filterCurrency],
  success: function(oData, response) {
    var oResults = oData.results;
    oModel.setData(oData);
    var oView = sap.ui.getCore().byId("__xmlview0");
    if (oView !== undefined){
      oView.setModel(oModel);
    }else{
      oModel.refresh(); // refresh new model data bindings
    }
  }
});

在进行 API 调用以获取数据时,您还应该使用 promises