[英]How to reference collection's data in render() when fetched in initialize() in BackboneJS?
[英]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.