この投稿から単純なBackboneアプリを構築しようとしています。Backbone.jsコレクションを使用してTwitterRESTfulAPIからデータをフェッチできません。私がやりたいのは、テキストボックスとボタンを追加することです。ユーザーがボタンを押すたびに、私のアプリは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リクエストは、ツイートコレクション内の解析によってキャプチャされます。私のul要素には何も追加されていません。
2回目のクリック(単語を含む):Twitterのリクエストはその単語を使用して行われます。ただし、前回の呼び出しからの「NYC」ツイートは出力されます。
3回目のクリック(他の単語を含む):2回目のクリックからの「いくつかの単語」が出力されます。
...。
Twitterがまだ返信していないので、ツイートを印刷しようとするたびに前回の返信が届きます。解析コールバックでツイートを取得して出力できたと思いますが、かなり厄介なようです。
一方、ツイートをリセットイベントにバインドしようとしましたが、どちらも機能しません。
何か案は??。
前もって感謝します!!