gpt4 book ai didi

javascript - backbonejs View 的initialize()和render()的正确用法是什么?

转载 作者:行者123 更新时间:2023-12-03 05:31:21 25 4
gpt4 key购买 nike

我发现backbonejs不同元素的用法相当模糊。根据我的理解,这是因为主干不想成为一个框架,而更多地是一组工具/对象。

我理解backbonejs的大部分内容,但我仍然质疑 View 的initialize()和render()调用的正确用法是什么。换句话说,每个逻辑中应该放置什么逻辑。

有人可以解释一下什么是最佳实践,或者什么被认为是 View 中这些调用的正确用法?

最佳答案

这是一个相当广泛的问题,但我会尝试一下。这里的关键是这些调用不存在“正确用法”。 Backbone 具有灵 active ,旨在适应您的需求。这就是为什么它在一个更复杂但“固执己见”的框架世界中仍然占有一席之地(它告诉你这是“我的方式还是高速公路”)。

Backbone 在渲染方面没有使用任何魔法。 render() 方法是无操作的,甚至不会自动为您调用。它的存在只不过是暗示通常如何做事情。

但是,实例化 View 时会自动调用 initialize() 方法。 Backbone 保证此时 View 的顶级 DOM 元素(el)已经创建并准备好附加内容。

但同样,这非常小:顶级元素在那里,但尚未附加到 DOM(除非您将 options.el 传递给构造函数,设置 el 到现有元素)。将 el 插入 DOM 也是您的工作。

因此您可以自由决定如何连接。我通常做的是这样的:

  • 我的大多数 View 都有一个模板,该模板通常分配给 View 的 template 属性。 (再次强调,这只是一个约定,不涉及任何魔法。您可以将其命名为 foo。)该模板在 initialize() 中编译。

  • initialize()中,我设置了与 View 应该表示的模型或集合的关系。即, View 观察模型/集合事件,并在数据更改时调用渲染。 (当然,您不必使用 Backbone 实体作为数据源......可以是任何东西)。

  • render()中,数据被输入到模板中,结果成为el的innerHTML。然后,我确保 el 已插入 DOM(如果尚未插入)。

  • 第一次调用 render() 应该在数据准备好时发生。正确的时机取决于应用程序。也许 render()initialize() 中的最后一个调用,或者某些事件稍后会启动它。

如果您觉得其中很多听起来像是重复的样板,是的,确实如此。类似 Marionette 的框架存在于 Backbone 之上来处理这个问题。

但是这个框架魔法会带来严重的性能损失。因此,当我必须生成大量 View 时,我坚持使用通用的 Backbone 内容(并使用我的 own components 之一来加速模板处理。)

关于javascript - backbonejs View 的initialize()和render()的正确用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40930340/

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