我正在为我自己的朋友制作一个 twitter 客户端,并使用 Backbone.js 和一个使用 Twitter oAuth API 的 php 后端来制作它。
所以这是场景:
- 用户认证
- 主干应用程序初始化并发送第一个请求:window.timeline.fetch();
- window.timeline 是一个主干集合,它的 url 是:/connect/timeline/
- 服务器以 json 格式返回 10 条最近的推文,window.timeline 使用推文模型添加它们,并将最后一条推文 ID 保存在一个变量中。
- 主干视图呈现并显示它们并触发计时器
- 计时器开始计时并运行 window.timeline.fetch({add: true}); 每 10 秒,并添加 /ID/ 添加获取 URL 的末尾,以告诉 twitter API 从该 ID 返回推文
- 因为我通过了添加选项,所以当服务器返回对象时,它会触发“添加”事件,我将它绑定到一个方法,该方法添加每条推文和列表的顶部,并保存最后一个推文 id 以在下一个计时器滴答中使用。
问题是 tweeter 有时会两次返回相同的推文(如 RT 和其他东西),并且由于该 ID 存在于骨干集合中,因此会产生此错误:
未捕获的错误:无法将同一模型添加到集合中两次,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;
}
});
谢谢(对不起我的英语)