关于backbone.js视图的渲染功能的困惑

时间:2012-07-02 12:17:10

标签: javascript backbone.js

刚开始使用backbone.js和javascript。 在我的收藏中,我可以收听'重置'事件并让它调用我视图的'渲染'功能(这个)。但我将视图添加到路由器中的DOM中,如下所示:

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

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

我正在按照教程说明为什么我知道答案,只是不知道背后的原因。

由于

1 个答案:

答案 0 :(得分:1)

$('#container').html(view.render().el)中,您将view的首要元素插入到#container元素中,如下所示:

<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>

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

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 - 属性设置为content,视图将自动搜索标识符为content的元素作为其元素。但是,您的所有视图内容都将直接插入到内容元素中。

希望这有帮助,如果某些事情仍然不清楚则发表评论!