繁体   English   中英

主视图的initialize()和render()的正确用法是什么?

[英]What is the correct usage for backbonejs view's initialize() and render()?

我发现骨架js的不同元素的用法非常含糊。 从我的不了解开始,这就是意图,因为主干不想成为框架,而是更多的工具/对象集。

我了解了elep.js的大部分内容,但我仍在质疑视图的initialize()和render()调用的正确用法是什么。 换句话说,应该在每个逻辑中放置什么逻辑。

有人可以在视图中解释这些调用的最佳实践或正确用法吗?

这是一个范围很广的问题,但我会尝试一下。 这里的关键takeway是,有作为“ 正确用法”为这些电话没有这样的事情。 骨干的目的是灵活的,旨在适应您的需求。 这就是为什么它在更加复杂但具有“意见”框架的世界中仍然占有一席之地的原因(告诉您这是“我的路还是高速公路”)。

骨干在渲染方面不使用任何魔术。 render()方法是无操作的,甚至不会为您自动调用。 它的存在无非是暗示事情通常是如何完成的。

但是,实例化视图时,会自动调用initialize()方法。 Backbone保证在这一点上,视图的顶级DOM元素( el )已经创建并且准备好附加东西。

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

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

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

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

  • render() ,数据被馈送到模板中,结果成为el的innerHTML。 之后,如果没有将el插入DOM,请确保它已插入。

  • 数据准备好后,应该首先对render()调用。 正确的时机取决于应用程序。 可能render()initialize()的最后一次调用,否则某些事件将在稍后启动。

如果您觉得其中许多内容像是重复的样板,是的,这就是事实。 Marionette之类的框架存在于Backbone之上,以解决这一问题。

但是,对于该框架魔术来说,存在明显的性能损失。 因此,当我不得不生成大量视图时,我会坚持使用通用的Backbone东西(并使用自己的 组件之一来加快模板处理的速度。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM