SAPUI5页面初始化/重新初始化

时间:2015-05-20 20:15:40

标签: initialization sapui5

我有一个带有图块的主屏幕,用户可以按下该图块转到另一个页面。 oninit:对于第二页,在获取/设置模型和正确显示数据时工作正常。如果我回去'到第一页(在我在第二个屏幕上进行了更改后),然后单击图块转到第二页,它第二次没有调用oninit,因此数据反映了所做的更改而不是我想要的(真正的初始化数据)。我尝试将onInit更改为OnBeforeRedendering,希望它能重新初始化模型/数据,但它似乎没有正确地重置所有内容。有没有办法回去做一些事情来强制在下次调用页面时调用onInit?我想如果我可以这样做,那么每次调用页面时都会调用onInit,它会解决我的问题。

这是我的onInit和goback控制器的一部分......

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();
    // set the data for the model
    oModel.setData({yr:yr});
    // set the model to the core
    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;
});

我很感激任何建议。

2 个答案:

答案 0 :(得分:2)

使用逻辑将模型数据重置为路径匹配处理程序。

答案 1 :(得分:0)

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