gpt4 book ai didi

javascript - 在 BackboneJS 中调用 render() 的适当方式

转载 作者:数据小太阳 更新时间:2023-10-29 04:31:28 25 4
gpt4 key购买 nike

在我见过的大多数 BackboneJS 示例中,父 View 在 subview 上调用 render() 函数。这对我来说似乎有点奇怪。也许它完全是为了优化之类的,但我不明白为什么不能在 subview 本身内进行优化。 subview 不应该负责调用它自己的 render() 吗?似乎在我所有的观点中,我最终得到的是这样的东西:

initialize: function() {
this.render();
}

此外,如果我的父 View 更新了 subview 的 model 属性, subview 应该如何知道模型已更改(因此 render() 需要叫)?我假设在这种情况下, parent 被迫调用 child 的 render()。虽然有点推断,但为什么父类需要知道子类在其模型更改时需要重新渲染呢?调用 subview 的渲染函数似乎在父 View 的域之外。

最佳答案

就像几乎所有与 Backbone 相关的问题一样,这是一个非常主观的问题。但这里有一些您可能希望 parent 呈现的原因:

  • 认为父 View 可能需要确保在其余呈现发生之前呈现 subview 是完全合理的。例如,父级可能需要根据其子级的大小调整容器元素的大小,或者仅在其内容由子级 View 呈现后才显示容器。

  • 您的“初始化时渲染”模式仅在您不需要首先执行其他操作时才有效 - 例如,一种常见的模式是将 View 绑定(bind)到模型的更改事件,调用 this.model.fetch(),并在回调中渲染。在这种情况下,特别是如果您关心不同渲染的执行顺序,最好在父级上有一个事件监听器,然后让父级处理渲染子级,而不是与每个子级绑定(bind),即使这些子级赢了正在调用 fetch()

  • 此外,让父级渲染子级并不排除子级重新渲染自己,例如以响应更具体的事件。让父级调用 child.render() 有助于确保在父级完成渲染时发生这种情况。

还值得注意的是, View 对render 有一个默认的空操作。因此,父级可以在子级上调用 render(),而不必确保它会执行任何操作。

在回答“如果父级更改子级的模型怎么办?”时,一种选择是,不要那样做 - 总是为每个新模型创建一个新的子级。但这可能不适合您的架构 - 在这种情况下,让父级负责重新渲染子级是完全合理的。

关于javascript - 在 BackboneJS 中调用 render() 的适当方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com