我正在学习骨干,并通过模拟推特教程。一切似乎都应该工作,但我在尝试重新渲染我的集合视图时获取一个未定义的对象({reset:true})。
我可以在我的网络资源中看到来自我的rails服务器的一个格式良好的响应 - [{id:1,content:...},{id:2 ..} ...]等等。但如果我在整个代码中的断点处停止 - 以及骨干自己的成功回调,响应(或bb的源代码中的resp)是未定义的。
此外,这是我潜伏在这里并在几个月后解决其他人问题的第一篇StackOverflow帖子!感谢这个精彩的社区。 p>
相关代码:
$(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;
}
})
如果需要,我可以包含我的推文模型或视图 - 这里似乎没有相关性,但我一直盯着这段代码几个小时,所以我有偏见。
答案 0 :(得分:0)
我只是想通了。首先,是的,我收到了有效的json响应并取得了成功。问题是我使用的是rails-backbone gem,installs its own backbone library with an custom Backbone.sync方法可以更好地处理rails。但是,我也将标准backbone.js放在我的供应商/资产中。我怀疑它是破坏rails-backbone自己的实现。删除了供应商backbone.js,一切都很好。
感谢所有的帮助!