onExit没有在openui5控制器中调用

时间:2016-01-06 06:33:17

标签: javascript jquery html sapui5

我在openui5中使用tab控制器,我想定期执行一些操作,所以我使用下面的代码:

sap.ui.jsview("oui5mvc.tabs", {
    getControllerName: function() {
        return "oui5mvc.tabs";
    },

    // defines the UI of this View
    createContent: function(oController) {

        var defaultTab = window.sessionStorage.getItem("startDialogue");
        if (null === defaultTab || undefined === defaultTab)
            defaultTab = "home";
        selectedTab = defaultTab.toLowerCase();
        var oTabStrip = new sap.ui.commons.TabStrip("tabStrip", {
            height: ($(window).height() - 40) + "px",
            width: "100%",
            tabs: [
                new sap.ui.commons.Tab(defaultTab.toLowerCase() + "Tab" + tabCount, {
                    text: defaultTab.toUpperCase(),
                    closable: true,
                    selected: true,
                    content: [ // Creating a new tab (e.g.: tab1)
                        new sap.ui.view(defaultTab.toLowerCase() + "view" + tabCount, {
                            viewName: "oui5mvc." + defaultTab.toLowerCase(),
                            type: sap.ui.core.mvc.ViewType.JS
                        })
                    ]
                })
            ],
            close: function(event) {
                var tabidx = event.getParameter("index");
                var tab = oTabStrip.getTabs()[tabidx];
                if (null != tab) {
                    (tab.getContent())[0].destroyContent();
                }
                this.closeTab(tabidx);
                this.removeTab(tabidx);

            },
            select: function(event) {
                var tabidx = event.getParameter("index");
                var tab = oTabStrip.getTabs()[tabidx];
                selectedTab = tab.getText().toLowerCase();
            }
        }).addStyleClass("customTabStrip");
    }
});

以下是tab1的代码:

var myVar;

sap.ui.controller("oui5mvc.tab1", {

    onInit: function() {
        alert("init");
        //  alert(this.getView());
        //this.getView().setBusy(true); 
    },

    onAfterRendering: function() {

        myVar = setInterval(function() {
            alert("Hello");
        }, 5000);
    },

    onExit: function() {
        clearInterval(myVar);
    },

});

但问题是我在选项卡控制器的onExit部分openui5中清除myVar但我的问题是我的代码流永远不会到达onExit我想知道为什么我想清除setInterval一旦tab关闭但是pop仍然会出现即使我关闭应用程序内的openui5选项卡。有关如何在关闭标签时调用onExit的任何提示或在关闭标签后停止警报的任何其他方式。

1 个答案:

答案 0 :(得分:1)

您必须在setInterval方法中使用onInit,在clearInterval方法中使用onExitonInit仅调用一次以初始化视图。可以多次调用onAfterRendering,导致注册多个间隔。

TabStrip.close活动中,您必须先致电closeTab() ,然后销毁标签及其内容(视图),否则TabStrip会有奇怪的行为(可能是一个bug)。 我建议在已关闭的标签上调用destroy(),这也会处理其内容(视图)。

close: function(event){
  var tabidx = event.getParameter("index");
  var tab = this.getTabs()[tabidx];
  this.closeTab(tabidx);
  if (tab!==null){
    tab.destroy();
  }
}

有关完整示例,请参阅here

修改:要显示忙碌指示,我更愿意在Control.setBusy(true)事件中致电Model.requestSent,在Control.setBusy(false)Model.requestCompleted事件中致电Model.requestFailed。如果您开始使用视图的onInit()方法加载数据,则会显示忙碌状态。