2017-06-27 7 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()間隔を無効にするために、第1の引数として)window.clearInterval(に与えられなければならない数を返します。 – sirion

+0

thx @sirion、コードを更新しました。 – Marc

0

使用しているテーブルの種類によって異なります。 oTable.getBinding( "x")。refresh()を呼び出すことができます。 "x"は "items"または "rows"です。しかし、すべてが表示されていない場合は、スクロール位置を忘れてテーブルにつながる可能性があります。

"本当の"解決策は、現在表示されているデータの断片を見つけて、バックエンドからまったく同じデータを再度読み取ることです。 v2.ODataModelでreadメソッドを使用すると、モデルは新しいデータを格納し、プロパティバインディングもテーブルに更新します。

0

@シリゾンは、あなたが持っているテーブル、スクロールのしくみなどに少し依存しています。私はあなたのテーブルが何らかの方法で、または他の方法で「振る舞い」することは避けられないと思います。新しい行がリフレッシュの間にテーブルに挿入されるか、またはいくつかの嘘が削除されます。また、リフレッシュするかもしれません

onRefreshTriggered: function() { 
    this.byId("myTable").getBinding("items" /* or "rows" */).refresh(); 
} 

それにもかかわらず、私は最良の選択肢は、(シリオンが言ったように)テーブルからListBindingを取得し、この結合にリフレッシュを行うことであると言うでしょう要素のバインドを行うと、スクロールに問題はありません(ただし、行が削除または追加された場合には問題が発生します)。

定期的なトリガー部分については、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); 
} 
関連する問題