Aar*_*ius 7 javascript backbone.js
在我看过的大多数BackboneJS示例中,父视图调用render()子视图上的函数.这对我来说有点奇怪.也许它完全用于优化或其他东西,但我不明白为什么优化不能在子视图本身内发生.儿童观点是否应该负责自己打电话render()?在我的所有观点中,我最终得到的结论如下:
initialize: function() {
this.render();
}
Run Code Online (Sandbox Code Playgroud)
此外,如果我的父视图更新了子视图的model属性,那么孩子应该如何知道模型已更改(因此render()需要调用)?我假设在这种情况下,父母被迫打电话给孩子render().虽然有点推断,为什么父母需要知道孩子在模型改变时需要重新渲染?看起来调用子视图的render函数在父视图的域之外.
nra*_*itz 13
就像Backbone相关的一切一样,这是一个非常主观的问题.但是,您可能希望父母呈现以下几个原因:
认为父视图可能需要确保在渲染的其余部分发生之前渲染子视图是完全合理的.例如,父级可能需要根据子级的大小调整容器元素的大小,或者只有在子视图呈现其内容时才显示容器.
只有在您不需要先执行其他操作时,"初始化渲染"模式才有效 - 例如,一个常见模式是视图绑定到模型的change事件,调用this.model.fetch()和回调中的渲染.在这种情况下,特别是如果你关心不同渲染的执行顺序,最好在父对象上有一个事件监听器然后让父对象渲染子对象,而不是与每个孩子绑定,即使这些孩子赢了不要打电话fetch().
此外,让父母渲染孩子不会妨碍孩子重新渲染自己,例如响应更具体的事件.父调用child.render()只是有助于确保在父完成呈现时发生这种情况.
值得注意的是,视图有默认的无操作render.所以父母可以打电话render()给孩子,而不必确定它会做什么.
回答"如果父母改变孩子的模型怎么办?",一个选择是,不要这样做 - 总是为每个新模型创建一个新的孩子.但这可能不适合您的架构 - 在这种情况下让父母负责重新渲染孩子非常有意义.
| 归档时间: |
|
| 查看次数: |
3032 次 |
| 最近记录: |