[英]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
方法和clearInterval
中onExit
方法。 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.requestCompleted
和Model.requestFailed
事件。 如果您开始在View的onInit()
方法中加载数据,则它将忙碌显示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.