【发布时间】:2015-07-29 22:56:40
【问题描述】:
来自 Ember 博客,这些是新的组件生命周期挂钩。
第一次渲染时(按顺序):
didInitAttrs在组件创建后运行,并且传递的属性保证存在。在 Ember 1.13 中,属性将以 this.get('attrName') 的形式提供。didReceiveAttrs在 didInitAttrs 之后运行,它还在后续的重新渲染中运行,这对于在所有渲染上都相同的逻辑很有用。当组件从内部重新渲染时,它不会运行。willRender在模板渲染之前运行。它在模板因任何原因更新时运行(初始和重新渲染,无论更改是由 attrs 更改还是重新渲染引起的)。didInsertElement在模板呈现并且元素位于 DOM 之后运行。didRender在 didInsertElement 之后运行(它也在后续的重新渲染中运行)。重新渲染时(按顺序):
didUpdateAttrs在组件的属性发生更改时运行(但在组件通过 component.rerender、component.set 或模板使用的模型或服务发生更改时重新渲染时不会运行)。didReceiveAttrs,同上。willUpdate在组件因任何原因重新渲染时运行,包括 component.rerender()、component.set() 或模板使用的模型或服务的更改。willRender,同上didUpdate在模板重新渲染并且 DOM 现在是最新的之后运行。didRender,同上。
这些是运行循环队列:
sync队列包含绑定同步作业actions队列是通用工作队列,通常包含计划任务,例如承诺routerTransitions队列包含路由器中的转换作业render队列包含用于渲染的作业,这些作业通常会更新 DOMafterRender包含要在所有先前计划的渲染任务完成后运行的作业。这通常对 3rd 方 DOM 操作库很有用,它只能在整个 DOM 树更新后运行destroy队列包含用于完成其他作业已计划销毁的对象的拆卸工作
【问题讨论】:
标签: ember.js