Невозможно получить данные из API Twitter RESTful с помощью коллекции Backbone.js - PullRequest
2 голосов
/ 03 июня 2011

Я пытаюсь научиться извлекать данные из базы данных, используя метод коллекции Backbone.js: fetch ().

Пример jsfiddle: здесь .

Возвращенная длина объекта равна нулю, что означает, что я не получаю никакого результата назад.Я могу очень легко получить json, используя jquery ajax, а Backbone.sync, очевидно, тоже использует метод .ajax.Могу ли я знать, что не так?

1 Ответ

14 голосов
/ 04 июня 2011

Вы столкнулись с двумя проблемами.

Первая - это то, что результаты твиттера (то, что вы хотите превратить в магистральные модели) находятся в свойстве «результатов».Чтобы использовать эти данные, вам необходимо переопределить метод parse в коллекции.Это конкретный пример, используемый в документации по магистрали:

http://documentcloud.github.com/backbone/#Collection-parse

Вторая проблема заключается в том, что метод fetch () является асинхронным, поэтому при получении значения «length»в коллекции это происходит до того, как ответ возвращается из твиттера, поэтому его длина по-прежнему равна 0.

Вам нужно настроить обработчик событий, чтобы прослушивать результаты «fetch» ​​и затем выводить длину:

var Tweet = Backbone.Model.extend();

var Tweets = Backbone.Collection.extend({
    model: Tweet,
    url: 'http://search.twitter.com/search.json?q=obama&callback=?',
    parse: function(response) {
        return response.results;
    }
});

var tweets = new Tweets();

tweets.bind('reset', function(collection) {
   alert(collection.length);
});

tweets.fetch();
...