繁体   English   中英

在openui5控制器中未调用onExit

[英]onExit not called in openui5 controller

我在openui5中使用选项卡控制器,我想定期执行一些操作,因此我使用了以下代码:

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,但是即使我关闭了openui5,弹出窗口仍然会出现选项卡。 关闭标签页时如何调用onExit的任何提示,或在标签页关闭后如何以其他方式停止警报。

你必须使用setInterval在你onInit方法和clearIntervalonExit方法。 onInit仅被调用一次以初始化视图。 可以多次调用onAfterRendering ,导致注册多个时间间隔。

TabStrip.close事件中,必须销毁closeTab() 然后再破坏选项卡及其内容(视图),否则TabStrip的行为异常(可能是错误)。 我建议在关闭的选项卡本身上调用destroy() ,这也会处理其内容(视图)。

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

有关完整示例,请参见此处

编辑:要显示一个繁忙的指标我更喜欢称之为Control.setBusy(true)Model.requestSent事件和Control.setBusy(false)Model.requestCompletedModel.requestFailed事件。 如果您开始在View的onInit()方法中加载数据,则它将忙碌显示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM