我正在使用Backbone和Layout Manager。我在MyView.js中有以下代码:
afterRender: function() {
var scope = this;
this.model.get("books").each(function(bookModel) {
var bookView = new BookView({
model: bookModel
});
scope.insertView(".books", bookView).render();
});
},
在BookView.js内部,我具有afterRender方法:
afterRender: function() {
console.log("after render");
},
我在模型的books属性中有6个项目,每本书叫
render()
。最终我得到的是“渲染后”仅记录一次。怎么了?丢失的5个“渲染后”日志在哪里? 最佳答案
上面的代码在MyView的afterRender方法中调用。出于未知原因,许多对render()
的调用都不会一一调用每本书的afterRender()。
在LayoutManager文档中反复阅读后,我意识到我需要在insertView()
方法内调用beforeRender()
而不渲染视图。这样,render()
将呈现所有子视图,而afterRender()
将被正确调用:
beforeRender: function() {
var scope = this;
this.model.get("books").each(function(bookModel) {
var bookView = new BookView({
model: bookModel
});
scope.insertView(".books", bookView);
});
},