刚开始使用backbone.js和javascript。 在我的收藏中,我可以收听'重置'事件并让它调用我视图的'渲染'功能(这个)。但我将视图添加到路由器中的DOM中,如下所示:
$('#container').html(view.render().el)
我调用render()。el(我假设返回一些HTML文本)并将其添加到我的容器div中。仅在我的视图上调用渲染是没用的。那么为什么我的视图在仅仅调用渲染函数的'reset'事件上完美更新(因为它只返回self(一个视图对象)是无用的),实际的更新发生在我的路由器中,视图的渲染el被附加到我的容器中格)?
我正在按照教程说明为什么我知道答案,只是不知道背后的原因。
由于
答案 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
的元素作为其元素。但是,您的所有视图内容都将直接插入到内容元素中。
希望这有帮助,如果某些事情仍然不清楚则发表评论!