0

Twitterのサイトに自動的に追加される新しいツイートがあるのと同じように、バックボーンアプリケーションでモデルの更新についてサーバーをできるだけ頻繁にチェックするようにしています。

私の現在のセットアップは、APIを介して外部アプリケーションをチェックしているため、サーバーにアクセスできないため、メモリをあまり消費せずにクライアント側にチェックを任せることができます。どうすればこれを実現できますか?

4

2 に答える 2

3

Javascriptでは、タイミングを実際に制御できる唯一の方法は、setTimeout/setIntervalを使用することです。setTimeout / setIntervalをラップするだけのヘルパー関数(「delay」など)を数えない限り、「より洗練された」メカニズムはありません。

したがって、dmi3yの答えは正しかった。ただし、タグと説明の両方でバックボーンについて言及しているので、ここにバックボーンっぽいバージョンがあります...

var YourModelClass = Backbone.Model.extend({url: remoteUrl});
var instance = new YourModelClass();
var seconds = 5;
window.setInterval(_.bind(instance.fetch, instance), 1000 * seconds);

または、クラスに組み込みたい場合は...

var YourModelClass = Backbone.Model.extend({
    url: remoteUrl,
    initialize: function() {
        var seconds = 5;
        window.setInterval(_.bind(this.fetch, this), 1000 * seconds);
    }
});
var instance = new YourModelClass();

setIntervalは、「ポーリング」を停止する場合にclearIntervalに渡すことができるオブジェクトを返すことにも言及する価値があります。

PSあなたがよく知らない場合に備えて_.bind、それはアンダースコアライブラリから来ています。これはバックボーンが依存しているので、あなたはすでにそれを持っています。thisタイムアウト/間隔関数が解決されると、その内部thisが2番目の引数になります_.bind(通常はそうではありませんwindow)。

于 2012-12-13T20:20:52.467 に答える
2

possible solution

(function IcallTheShoots(){
   console.log('am I?'); // any way you able communicate with server
   window.setTimeout(IcallTheShoots, 1500);
})();

why setTimeout instead of setInterval, cause it makes sure next cycle will be called only when current is finished

于 2012-12-13T19:52:23.323 に答える