我在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的任何提示或在关闭标签后停止警报的任何其他方式。
答案 0 :(得分:1)
您必须在setInterval
方法中使用onInit
,在clearInterval
方法中使用onExit
。 onInit
仅调用一次以初始化视图。可以多次调用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()
方法加载数据,则会显示忙碌状态。