我有一个SAPUI5表。我想要的是提供一个文本字段,用户可以输入时间间隔(如3分钟),表格在3分钟后自动刷新。此外,如果他提供新的价值(例如8分钟),则表格现在将在8分钟后刷新。在某个用户指定的时间间隔后自动刷新sapui5表
任何人都可以提供一些想法我怎么能做到这一点?提前致谢。
我有一个SAPUI5表。我想要的是提供一个文本字段,用户可以输入时间间隔(如3分钟),表格在3分钟后自动刷新。此外,如果他提供新的价值(例如8分钟),则表格现在将在8分钟后刷新。在某个用户指定的时间间隔后自动刷新sapui5表
任何人都可以提供一些想法我怎么能做到这一点?提前致谢。
window.setInterval
可用于在特定时间间隔内调用函数。 window.clearInterval
可用于终止它。
将更改处理程序附加到文本中,清除任何现有时间间隔并用新时间开始新的时间间隔。
<Input change="onInputIntervalChange" />
onInputIntervalChange: function(oEvent) {
var sIntervalInMinutes = oEvent.getParameter("newValue");
var iIntervalInMinutes = parseInt(sIntervalInMinutes);
var iIntervalInMillisec = iIntervalInMinutes * 60 * 1000;
window.clearInterval(this._intervalId);
this._intervalId = window.setInterval(function(){
// refresh your table
}.bind(this), iIntervalInMillisec);
}
请记住,第一刷新会发生后的时间间隔已过。如果您想在用户更改该值时立即刷新表格,请在setInterval
之前直接调用刷新方法。
这取决于你正在使用什么样的表。 你总是可以调用oTable.getBinding(“x”)。refresh(),其中“x”是“items”或“rows”。但是如果不是所有的东西都显示出来的话,这可能会导致桌面忘记滚动位置。
因此,“真正”的解决方案是找出当前显示的数据片段,然后再次从后端读取完全相同的数据。使用v2.ODataModel上的read-method,模型存储新数据并更新表中的属性绑定。
正如@sirion所说,它取决于你有什么桌子,你希望你的滚动表现如何,等等。我认为,如果你的桌子会以某种方式“推动”,这是不可避免的。在刷新之间插入新行或删除某些谎言。
不过,我要说的是,最好的选择是让从表中ListBinding(如西连说),并使用这个绑定刷新:
onRefreshTriggered: function() {
this.byId("myTable").getBinding("items" /* or "rows" */).refresh();
}
它也可能是一个想法,刷新每行的元素绑定,那么你肯定不会遇到滚动问题(但是如果行被删除或添加,你将会遇到问题)。
onRefreshTriggered: function() {
(this.byId("myTable").getItems() || []).forEach(function (oItem){
oItem.getElementBinding(/* model name */).refresh();
});
}
对于定期触发部分,我使用sap.ui.core.IntervalTrigger类。这是相当容易使用:
// e.g. in onInit:
this._trigger = new IntervalTrigger(3 * 60 * 1000 /* initial interval */)
this._trigger.addListener(this.onRefreshTriggered, this);
// in a separate method, e.g. as a input field change event
onIntervalChange: function(oEvent) {
var iInterval = parseInt(oEvent.getSource().getValue(), 10);
this._trigger.setInterval(iInterval * 60 * 1000);
}
window.setInterval()返回一个数字,必须给予window.clearInterval()作为第一个参数为了禁用间隔。 – sirion
thx @sirion,更新了代码。 – Marc