1

刚开始使用backbone.js 和javascript。在我的收藏中,我可以监听“reset”事件并让它调用我的视图(this)的“render”函数。但是我将视图添加到路由器中的 DOM 中,如下所示:

$('#container').html(view.render().el)

我调用 render().el (我假设它返回一些 HTML 文本)并将其添加到我的容器 div 中。仅在我的视图上调用渲染是没有用的。那么为什么我的视图会在仅调用渲染函数的“重置”事件上完美更新(这是无用的,因为它只是返回 self(视图对象),实际更新发生在我的路由器中,其中视图的渲染 el 被附加到我的容器中分)?

我正在关注一个教程,为什么我知道答案,只是不知道背后的原因。

谢谢

4

1 回答 1

1

$('#container').html(view.render().el)您将view' 的顶部元素插入您的#container-element 时,如下所示:

<div id="container">
  <div class/id="whatever-your-view-has-defined">
    <!-- THIS IS WHERE YOUR VIEW PUTS ANYTHING GOING TO $(this.el) or this.$el -->
  </div>"
</div>

因此,当您在视图的相应集合或模型完成获取之前调用渲染时,您可能只是将视图自己的元素插入容器中。现在,当您的集合/模型完成获取并触发 areset时,视图会再次呈现。我想你的渲染看起来像这样:

render: function() {

  // do something with $(this.el) or this.$el

  // loop through collection and insert something from each model to the view
  // OR
  // take the view's model and insert it to the view
  // I reckon the inserting is done with templates or jQuery manipulation

  //finally 
  return this; // return this to allow chaining render to other things like calling el
}

这基本上意味着您的第一次渲染将您的视图暂存到 DOM 中,然后调用的渲染将reset用内容填充它。你可以放弃

$('#container').html(view.render().el)

部分,例如,如果您将视图的id-property 设置为content,则视图将自动寻找具有标识符content的元素作为它的元素。但是随后您的所有视图内容将直接插入到内容元素中。

希望这会有所帮助,如果仍有不清楚的地方,请发表评论!

于 2012-07-02T12:35:00.217 回答