2017-06-27 30 views
0

我有一个SAPUI5表。我想要的是提供一个文本字段,用户可以输入时间间隔(如3分钟),表格在3分钟后自动刷新。此外,如果他提供新的价值(例如8分钟),则表格现在将在8分钟后刷新。在某个用户指定的时间间隔后自动刷新sapui5表

任何人都可以提供一些想法我怎么能做到这一点?提前致谢。

回答

0

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之前直接调用刷新方法。

+0

window.setInterval()返回一个数字,必须给予window.clearInterval()作为第一个参数为了禁用间隔。 – sirion

+0

thx @sirion,更新了代码。 – Marc

0

这取决于你正在使用什么样的表。 你总是可以调用oTable.getBinding(“x”)。refresh(),其中“x”是“items”或“rows”。但是如果不是所有的东西都显示出来的话,这可能会导致桌面忘记滚动位置。

因此,“真正”的解决方案是找出当前显示的数据片段,然后再次从后端读取完全相同的数据。使用v2.ODataModel上的read-method,模型存储新数据并更新表中的属性绑定。

0

正如@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); 
} 
相关问题