Backbone fetch没有收到服务器响应

时间:2015-05-29 14:52:01

标签: ruby-on-rails ajax backbone.js callback fetch

我正在学习骨干,并通过模拟推特教程。一切似乎都应该工作,但我在尝试重新渲染我的集合视图时获取一个未定义的对象({reset:true})。

我可以在我的网络资源中看到来自我的rails服务器的一个格式良好的响应 - [{id:1,content:...},{id:2 ..} ...]等等。但如果我在整个代码中的断点处停止 - 以及骨干自己的成功回调,响应(或bb的源代码中的resp)是未定义的。

此外,这是我潜伏在这里并在几个月后解决其他人问题的第一篇StackOverflow帖子!感谢这个精彩的社区。

相关代码:

    $(document).ready(function(){
    var tweets = new TweetsCollection;
    var stream = new TweetsView({collection: tweets});
    stream.render();


    $(".container").append(stream.el);
    tweets.fetch();
    stream.addAll();
    })

    var TweetsCollection = Backbone.Collection.extend({
    model: Tweet,
    url: 'tweets/recent',

    parse: function (response) {
    console.log("In Parse: " + response.length) //this logs "In Parse: 0"
    return response;
    }
    })

    var TweetsView = Backbone.View.extend({

    template: JST['backbone/templates/tweetsTemplate'],

    tagName: "section",

    id: 'tweets-container',

    initialize: function(){
        this.listenTo(this.collection, 'reset', this.addAll)
    },

    render: function(){

        this.$el.html(this.template());

    return this;
    },

  addOne: function(tweet){
    debugger
    var view = new TweetView({model: tweet});
    view.render();
    this.$el.find('#tweets-container').prepend(view.el);
    console.log("addOne this: " + this);
    return this;
  },

  addAll: function(){
    console.log('adding all')
    debugger    //this.collection.length === 0
    this.collection.each(function(tweet){
        this.addOne(tweet);
    }, this);
    return this;
    }

    })

如果需要,我可以包含我的推文模型或视图 - 这里似乎没有相关性,但我一直盯着这段代码几个小时,所以我有偏见。

1 个答案:

答案 0 :(得分:0)

我只是想通了。首先,是的,我收到了有效的json响应并取得了成功。问题是我使用的是rails-backbone gem,installs its own backbone library with an custom Backbone.sync方法可以更好地处理rails。但是,我也将标准backbone.js放在我的供应商/资产中。我怀疑它是破坏rails-backbone自己的实现。删除了供应商backbone.js,一切都很好。

感谢所有的帮助!