Twitterのサイトに自動的に追加される新しいツイートがあるのと同じように、バックボーンアプリケーションでモデルの更新についてサーバーをできるだけ頻繁にチェックするようにしています。
私の現在のセットアップは、APIを介して外部アプリケーションをチェックしているため、サーバーにアクセスできないため、メモリをあまり消費せずにクライアント側にチェックを任せることができます。どうすればこれを実現できますか?
Twitterのサイトに自動的に追加される新しいツイートがあるのと同じように、バックボーンアプリケーションでモデルの更新についてサーバーをできるだけ頻繁にチェックするようにしています。
私の現在のセットアップは、APIを介して外部アプリケーションをチェックしているため、サーバーにアクセスできないため、メモリをあまり消費せずにクライアント側にチェックを任せることができます。どうすればこれを実現できますか?
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
)。
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