如何init/Re-Init页面或再次触发onBeforeRendering?

How to init/Re-Init Page or trigger onBeforeRendering again?

我有一个带有磁贴的主屏幕,用户可以按该磁贴转到另一个页面。第二页的 onInit 在 getting/setting 模型中工作正常,数据显示正确。

如果我 'go back' 到第一页(在第二个屏幕上进行更改后),然后单击磁贴转到第二页,它 不会调用onInit 第二次 所以数据反映了所做的更改,而不是我想要的(真正的初始化数据)。我 尝试将 onInit 更改为 onBeforeRedendering 希望它能重新初始化 model/data 但它似乎没有正确重置所有内容。

有没有一种方法可以返回以强制在下次调用该页面时调用 onInit?我想,如果我能做到,那么每次调用页面时都会调用 onInit,这将解决我的问题。

这是我的 onInit 和 'go back' 控制器的部分......

sap.ui.define([
  'sap/ui/core/mvc/Controller',
  'sap/ui/model/json/JSONModel',
  'sap/viz/ui5/controls/common/feeds/FeedItem',
  'sap/m/MessageBox',
  'sap/viz/ui5/data/FlattenedDataset'
], function(Controller, JSONModel, FeedItem, MessageBox, FlattenedDataset) {
  "use strict";

  var ColumnController = Controller.extend("controllers.Quarter", {
    onInit: function(oEvent) {
      var oRouter = sap.ui.core.routing.Router.getRouter("router");
      var myView = this.getView();
      var today = new Date();
      var year = today.getFullYear();
      var yr = year.toString();
      var mnth = today.getMonth();
      var qtr = Math.floor((mnth / 3));
      this.makeYearList(yr);
      var mthis = this;
      var oModel = new sap.ui.model.json.JSONModel();
      oModel.setData({
        yr: yr
      });
      sap.ui.getCore().setModel(oModel);
      myView.byId("mySelectMenu").setSelectedKey(yr);
      myView.byId("mySelectMenu").attachChange(function() {
        yr = this.getSelectedKey();
        mthis.checkYr(yr, qtr);
        mthis.recList(myView, yr, qtr);
      });
      myView.byId("selQtr").attachChange(function() {
        qtr = this.getSelectedKey();
        mthis.checkYr(yr, qtr);
        mthis.recList(myView, yr, qtr);
      });
      oRouter.attachRouteMatched(function(oEvent) {
        mthis.checkYr(yr, qtr);
        mthis.recList(myView, yr, qtr);
      });
    },

    goBack: function() {
      var oHistory = sap.ui.core.routing.History.getInstance();
      var sPreviousHash = oHistory.getPreviousHash();
      var oView = this.getView();
      if (sPreviousHash) {
        window.location.replace("#/" + sPreviousHash);
      } else {
        window.location.replace("#");
      }
    },

  });

  return ColumnController;
});

如有任何建议,我将不胜感激。

解决此问题的更好方法是,对第一页和第二页使用 shell。 Shell 将自动销毁您的内容(如果您在第二页,那么第一页的内容将被销毁,反之亦然)。否则,您需要手动销毁内容以解决重复 id 问题,您需要自己销毁并在需要的任何地方调用控制器。

将重置模型数据的逻辑放入路由匹配处理程序中。