在某个用户指定的间隔后自动刷新sapui5表

时间:2017-06-27 12:49:01

标签: javascript sapui5

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

任何人都可以提出一些想法,我该如何实现这一目标?提前致谢。

3 个答案:

答案 0 :(得分: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之前直接调用刷新方法。

答案 1 :(得分:0)

这取决于您使用的是哪种桌子。 你总是可以调用oTable.getBinding(“x”)。refresh(),“x”是“items”或“rows”。但如果没有显示所有内容,那可能会导致桌子忘记滚动位置。

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

答案 2 :(得分:0)

正如@sirion所说,这取决于你有什么表,你想要你的滚动表现如何等等。我认为你的桌子不可避免地会以某种方式“轻推”,例如:在刷新之间插入新行或者删除某些谎言。

尽管如此,我会说最好的选择是从表中获取ListBinding(如sirion所说)并对此绑定进行刷新:

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);
}