javascript - 为什么人们在主干 View 渲染的第一行正式执行 this.$el.html() ?

标签 javascript jquery html backbone.js

下面有一个 Backbone.js View 渲染函数:

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(); 来渲染 View 。

但是,我不知道为什么在第一行使用这段代码。即使我删除了第一行,它的工作原理也完全相同。

最佳答案

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

在此特定示例的上下文中,假设您现在有 2 本书,如果数据更改为 3 本书,您将重新渲染此 View - 您将有 5 本书,其中没有可疑行。

事实上 this.$el.html(); 在您共享的代码中不会执行任何操作,但 this.$el.html(''); code> 修复了潜在的错误。我想你错过了''

关于javascript - 为什么人们在主干 View 渲染的第一行正式执行 this.$el.html() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37477408/

相关文章:

c# - 使用 Ajax 将 json 从 Javascript 返回到 aspx

javascript - wrap() 多次重复元素 - jQuery

javascript - 如何在 div 中包含我的 JavaScript 游戏?

javascript - Knockout JS 绑定(bind)计算可观察值不起作用

javascript - 为什么我无法在此提交监听器中获取带有输入值的表单数据对象?

javascript - 使用 f 时 bool 值未更新 :ajax onevent

javascript - 异步 Javascript 调用 - 等待请求,如果在 x 时间内到达,则立即执行,否则跳过

jquery - 使用 CORS header 时,$.get 在 IE 中不起作用

html - 在 Ubuntu 上通过 NGINX 加载 html 页面时出现 500 内部服务器错误

javascript - 如何在拖动元素时逐渐降低其不透明度?