私は自分の友達のためにTwitterクライアントを作成しており、Backbone.jsとTwitteroAuthAPIを使用したphpバックエンドを使用して作成しています。
シナリオは次のとおりです。
- ユーザーが認証します
- バックボーンアプリが初期化され、最初のリクエストが送信されます:window.timeline.fetch();
- window.timelineはバックボーンコレクションであり、そのURLは/ connect /timeline/です。
- サーバーはjsonとwindowで最近の10件のツイートを返します。timelineはツイートモデルを使用してそれらを追加し、最後のツイートIDを変数に保存します。
- バックボーンビューはそれらをレンダリングして表示し、タイマーをトリガーします
- タイマーがカチカチ音をたて始め、window.timeline.fetch({add:true});を実行します。10秒ごとに、/ ID /を追加してフェッチURLの末尾を追加し、TwitterAPIにそのID以降のツイートを返すように指示します
- 追加オプションを渡したので、サーバーがオブジェクトを返すと、「追加」イベントがトリガーされ、すべてのツイートとリストの一番上を追加し、次のタイマーティックで使用する最後のツイートIDを保存するメソッドにバインドします。
問題は、ツイーターが同じツイートを2回返すことがあり(RTなど)、そのIDがバックボーンコレクションに存在するため、次のエラーが発生することです。
キャッチされないエラー:同じモデルをセットに2回追加することはできません。119896811958833150
プログラムを終了します。どうすればこの状況を制御できますか?またはこれを行うためのより良い方法はありますか?
window.Tweet = Backbone.Model.extend({});
window.Timeline = Backbone.Collection.extend({
model: Tweet,
url: function(){
var id = (window.lastId) ? window.lastId + "/?" + Math.floor(Math.random()*99999) : "";
return "/connect/timeline/" + id;
}
});
ありがとう(そして私の英語でごめんなさい)