2015-05-20 5 views
1

У меня есть главный экран с плиткой, которую пользователь может нажать, чтобы перейти на другую страницу. Oninit: для этой второй страницы отлично работает при получении/настройке модели, и данные отображаются правильно. Если я вернусь на первую страницу (после того, как я внес изменения на втором экране), а затем нажмите на плитку, чтобы перейти на вторую страницу, она не вызывает oninit этот второй раз, и поэтому данные отражают изменения, которые были сделаны, а не то, что я хочу (истинные инициализированные данные). Я попытался изменить onInit на OnBeforeRedendering, надеясь, что он будет повторно инициализировать модель/данные, но, похоже, он не сбрасывает все правильно. Есть ли способ вернуться, чтобы сделать что-то, чтобы заставить onInit быть вызванным в следующий раз, когда страница вызывается? Я думаю, что если я смогу сделать так, чтобы onInit вызывал каждый раз, когда вызывалась страница, что она исправит мою проблему.SAPUI5 Page Init/Re-Init

Вот часть моего контроллера для 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

спасибо. Мне придется попробовать это ... Я думал об этом прошлой ночью, а также о возможности ... – user3861284

0

Лучший способ преодолеть эту проблему - использовать оболочку для своей страницы один и два. Shell автоматически уничтожит ваш контент (если вы находитесь на странице два, тогда одно содержимое страницы будет уничтожено и наоборот). в противном случае вам необходимо вручную уничтожить содержимое, чтобы избежать дублирования проблемы с идентификатором, и вам нужно уничтожить самостоятельно и вызвать контроллер там, где вы хотите.

+0

У меня на обеих страницах есть оболочка, поэтому из того, что вы сказали, звучит так, как будто оболочка не разрушает контент. Если мне не нужно установить опцию на оболочке .... – user3861284

Смежные вопросы