我正在尝试从这篇文章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();
事情是:
第一次点击(空文本框):twitter 请求被 Tweets 集合中的 parse 捕获。我的 ul 元素没有附加任何内容。
第二次点击(有一些词):用那个词发出推特请求。但是,会打印上一次通话中的“NYC”推文。
第三次单击(带有其他单词):打印第二次单击的“某些单词”。
……
我意识到每次我尝试打印我的推文时,我都会收到之前的回复,因为 Twitter 还没有回复我。我想我可以在解析回调中获取我的推文并打印它们,但这似乎很讨厌。
另一方面,我试图让我的推文将它们绑定到重置事件,但它也不起作用。
有任何想法吗??。
提前致谢!!