为什么人们正式这样做。$ el.html()在骨干视图渲染的第一行?

时间:2016-05-27 07:30:07

标签: javascript jquery html backbone.js

下面有一个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();来渲染视图。

但是,我不知道为什么在第一行使用此代码。它完全相同,即使我删除了第一行。

1 个答案:

答案 0 :(得分:2)

您经常看到的那一行是this.$el.html('');。注意额外的''使它成为一个setter而不是getter。它用于清除视图中与this.$el.empty()类似的现有内容。如果它不存在,当您重新渲染视图以显示更改的数据时,旧数据将保留在其中,因为它是一个仅附加项目的集合视图。

在这个特定示例的上下文中,假设您现在有2本书,如果数据更改为3本书,则会重新呈现此视图 - 您将有5本书而没有可疑行。

由于this.$el.html();在您共享的代码中没有执行任何操作,但this.$el.html('');修复了潜在的错误。我想你错过了''