下面有一个Backbone.js视图渲染功能:
var bookListView = Backbone.View.extend({
model: BooksCollection,
render: function() {
this.$el.html(); // lets render this view
var self = this;
for (var i = 0; i < this.model.length; ++i) {
// lets create a book view to render
var m_bookView = new bookView({
model: this.model.at(i)
});
// lets add this book view to this list view
this.$el.append(m_bookView.$el);
m_bookView.render(); // lets render the book
}
return this;
},
});
我刚才知道人们通常会在渲染函数的开头添加this.$el.html();
来渲染视图。
但是,我不知道为什么在第一行使用此代码。它完全相同,即使我删除了第一行。
答案 0 :(得分:2)
您经常看到的那一行是this.$el.html('');
。注意额外的''
使它成为一个setter而不是getter。它用于清除视图中与this.$el.empty()
类似的现有内容。如果它不存在,当您重新渲染视图以显示更改的数据时,旧数据将保留在其中,因为它是一个仅附加项目的集合视图。
在这个特定示例的上下文中,假设您现在有2本书,如果数据更改为3本书,则会重新呈现此视图 - 您将有5本书而没有可疑行。
由于this.$el.html();
在您共享的代码中没有执行任何操作,但this.$el.html('');
修复了潜在的错误。我想你错过了''