我找到了一些Backbone.js代码的示例,然后我根据自己的需要采用了这些代码。
在获取任何内容之前调用render
的{{1}}函数。当有内容要呈现时,它似乎不再被调用。
后端返回两个结果,所以这不是问题。
CommentListView
答案 0 :(得分:4)
fetch
的行为在Backbone 1.0.0中发生了一些变化。来自ChangeLog:
- 将集合的“更新”重命名为 set ,以获得与类似
model.set()
的并行性,并与重置形成对比。它现在是 fetch 之后的默认更新机制。如果您想继续使用“重置”,请传递{reset: true}
。
抓取
collection.fetch([options])
从服务器获取此集合的默认模型集,并在集合到达时设置。 [...]当模型数据从服务器返回时,它使用 set 来(智能地)合并获取的模型,除非您通过
{reset: true}
,
您的initialize
只是绑定到"reset"
:
this.model.bind("reset", this.render, this);
您可以绑定"add"
生成的"remove"
,"change"
和"reset"
事件,也可以明确要求fetch
事件你this.commentList.fetch({ reset: true });
:
CommentListView
我在这里的其他一些事情:
由于您的collection
视图使用的是集合而非模型,因此您可能需要将其称为this.commentListView = new CommentListView({collection: this.commentList});
:
this.collection
然后在视图中引用this.collection.each(function(model) { ... })
。有关视图构造函数如何处理其参数的详细信息,请参阅Collection#set
。
View#initialize
,因此您可以说_.each(this.model.models, ...)
而不是el
。this.$el
的缓存版本,因此您可以说$(this.el)
而不是console.log(this.model.models)
。this.model.models
之类的事情。控制台通常会抓取实时引用,因此当您查看而不是在调用console.log
时,控制台中显示的状态将是console.log(this.model.toJSON())
的状态。面对时间和AJAX问题时,使用on
更可靠。$el
而不是listenTo
(AKA {{1}}),因为它不太容易受到内存泄漏的影响。答案 1 :(得分:0)
通常用于为fetch创建一个监听器,当fetch完成并更改模型或集合时会有一个回调。试试这个:
var AppRouter = Backbone.Router.extend({
routes:{
"":"list"
},
list:function () {
this.commentList = new CommentCollection();
this.commentListView = new CommentListView({model:this.commentList});
this.listenTo(this.commentList,'change', this.makeRender);
this.commentList.fetch();
},
makeRender: function(){
$('#sidebar').html(this.commentListView.render().el);
}
});