【发布时间】:2012-04-06 20:11:09
【问题描述】:
我正在尝试从这篇帖子 Unable to fetch data from Twitter RESTful API using Backbone.js Collection 构建一个简单的 Backbone 应用程序。我想做的是添加一个文本框和一个按钮。每次用户按下按钮时,我的应用都会向 twitter 发出请求,并根据文本框内容在 twitter 中搜索(默认搜索单词“NYC”)。
我的代码如下。
我的推文集
var Tweets = Backbone.Collection.extend({
model: Tweet,
url: 'http://search.twitter.com/search.json?q=NYC&callback=?',
parse: function(response) {
console.log('parsing ...')
return response.results;
}
});
我的看法。
var PageView = Backbone.View.extend({
el: $('body'),
events: {
'click button#add': 'addItem'
},
initialize: function() {
_.bindAll(this, 'render', 'addItem');
this.tweets = new Tweets();
this.counter = 0;
this.render();
},
render: function() {
$(this.el).append("<input id= 'search'type='text' placeholder='Write a word'></input>");
$(this.el).append("<button id='add'>Search twitts</button>");
$(this.el).append("<ul id='tweets'></ul>");
return this;
},
addItem: function(item) {
var subject = $('#search').val() || 'NYC';
this.tweets.url = 'http://search.twitter.com/search.json?q=' + subject + '&callback=?';
// never called ...
this.tweets.bind('reset', function(collection) {
console.log(collection.length);
alert(collection.length);
});
$.each(this.tweets.fetch().models, function(index, tweet) {
item = new Tweet();
item.set({
order: this.counter,
info: tweet.attributes.text// modify item defaults
});
$('ul', this.el).append("<li>" + item.get('order') + " " + item.get('info') + "</li>");
});
}
});
var pageView = new PageView();
事情是这样的:
第一次点击(空文本框):推特请求被解析捕获 在推文集合中。我的 ul 元素没有附加任何内容。
第二次点击(用一些词):用那个词发出推特请求 单词。但是,会打印上一次通话中的“NYC”推文。
第三次点击(使用其他单词):第二次点击的“某个单词” 被打印出来了。
....
我意识到,每次我尝试打印我的推文时,我都会收到之前的回复,因为 Twitter 还没有回复我。我想我可以在解析回调中获取我的推文并打印出来,但这似乎很讨厌。
另一方面,我试图让我的推文将它们绑定到重置事件,但它也不起作用。
有什么想法吗??
提前致谢!!
【问题讨论】:
-
快速更新。如果您希望它在 Backbone 1.0.0 中工作,您似乎必须将
{reset: true}传递给this.tweets.fetch。
标签: javascript twitter backbone.js