我有一个带有图块的主屏幕,用户可以按下该图块转到另一个页面。 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;
});
我很感激任何建议。
答案 0 :(得分:2)
使用逻辑将模型数据重置为路径匹配处理程序。
答案 1 :(得分:0)
解决此问题的更好方法是,为第一页和第二页使用shell。 Shell会自动销毁您的内容(如果您在第二页,那么第一页内容将被销毁,反之亦然)。否则,你需要手动销毁内容以克服重复的id问题,你需要自己销毁并在任何你想要的地方调用控制器。