【发布时间】:2015-05-29 14:52:00
【问题描述】:
我正在学习主干课程并学习模拟 Twitter 教程。一切似乎都应该正常工作,但是在尝试在 fetch({reset: true}) 上重新呈现我的集合视图时,我得到了一个未定义的对象。
我可以在我的网络资源中看到来自我的 rails 服务器的格式良好的响应 - [{id: 1, content: ...},{id: 2..}...] 等等。但是如果我在整个代码中的断点处停止 - 以及主干自己的成功回调,响应(或 bb 源代码中的响应)是未定义的。
另外,这是我潜伏在这里数月并解决其他人的问题后的第一篇 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;
}
})
如果需要,我可以包含我的推文模型或视图 - 这里似乎不相关,但我已经盯着这段代码几个小时了,所以我有偏见。
【问题讨论】:
-
我没有看过你的其余代码,但你应该在创建它的实例之前声明你的集合。
-
这只是从各种有组织的主干文件复制/粘贴到一个代码片段中。你能说得更具体点吗?
-
服务器负载是什么样的?它是一个有效的 JSON 序列化数组吗?
标签: ruby-on-rails ajax backbone.js callback fetch