1

私はbackbones.jsフェッチを使用してTwitter検索からjsonを取得しようとしています

そして、以下の私のコードは、誰かが私がどこで間違っているのか教えてもらえますか?

(function($){

  var Item = Backbone.Model.extend();

  var List = Backbone.Collection.extend({
    model: Item,
    url:"http://search.twitter.com/search.json?q=blue%20angels&rpp=5&include_entities=true&result_type=mixed"
  });    

  var ListView = Backbone.View.extend({    
    el: $('#test'),
    events: {
      'click button#add': 'getPost'
    },
    initialize: function(){
      _.bindAll(this, 'render', 'getPost');
      this.collection = new List();
      this.render(); 
    },
    render: function(){
      var self = this;      
      $(this.el).append("<button id='add'>get</button>");
    },
    getPost: function(){
      console.log(this.collection.fetch());
    }

  });

  // **listView instance**: Instantiate main app view.
  var listView = new ListView();      
})(jQuery);​

バックボーンを使い始めたばかりで、jsonをconsole.logにしたいだけです。

ここに私の例を見ることができます。jsfiddle.net/YnJ9q/2/

4

1 に答える 1

5

上記の2つの問題があります。

まず、フェッチされたJSONをコンソールに記録するために、fetchメソッドにsuccess/failコールバックを追加する必要があります。

getPost: function(){
    var that = this;
    this.collection.fetch(
    {
        success: function () {
             console.log(that.collection.toJSON());
        },
        error: function() {
             console.log('Failed to fetch!');
        }
   });
}

もう1つの問題は、「同一生成元ポリシー」の問題です。このリンクを見ると、これを解決する方法を見つけることができます。

更新: コードを変更し、更新されたsyncメソッドを含めました。今は動作します!こちらをご覧ください!

基本的に、以下のようにとメソッドcollectionを含めるように更新します。parsesync

var List = Backbone.Collection.extend({
    model: Item,

    url: "http://search.twitter.com/search.json?q=blue%20angels&rpp=5&include_entities=true&result_type=mixed",

    parse: function(response) {
        return response.results;
    },

    sync: function(method, model, options) {
        var that = this;
        var params = _.extend({
            type: 'GET',
            dataType: 'jsonp',
            url: that.url,
            processData: false
        }, options);

        return $.ajax(params);
    }
});
于 2012-10-25T13:18:48.110 に答える