Ember.js 为什么在init和didUpdateAttrs上分配属性是不同的?

Ember.js 为什么在init和didUpdateAttrs上分配属性是不同的?,ember.js,ember-components,Ember.js,Ember Components,目前,有这样一个例子: import Ember from 'ember'; export default Ember.Component.extend({ init() { this._super(...arguments); this.errors = []; }, didUpdateAttrs() { this._super(...arguments); this.set('errors', []); }, ... }); 为什么

目前,有这样一个例子:

import Ember from 'ember';

export default Ember.Component.extend({
  init() {
    this._super(...arguments);
    this.errors = [];
  },

  didUpdateAttrs() {
    this._super(...arguments);
    this.set('errors', []);
  },

  ...
});
为什么在
init
处为
errors
属性赋值不同
didUpdateAttrs
?他们的区别是什么

根据@locks-answer更新了


可观测性何时设置?在初始化之后?但在初始化之前,父组件的值已分配给子组件的属性。

这必须主要考虑可观察性。 在
init
上,尚未设置可观测性,因此
this.errors=[]
this.set('errors',[])
在功能上类似


如果在
didUpdateAttrs
lifecycle钩子中执行
this.errors=[]
,则相关的计算属性和模板不会更新。这是因为您当前需要
get
/
set
以符合KVO。

这必须主要考虑可观察性。 在
init
上,尚未设置可观测性,因此
this.errors=[]
this.set('errors',[])
在功能上类似


如果在
didUpdateAttrs
lifecycle钩子中执行
this.errors=[]
,则相关的计算属性和模板不会更新。这是因为您当前需要
get
/
set
符合KVO。

何时设置可观测性?在初始化之后?父组件的值在init.Yup之前、init之后分配给子组件的属性。据我所知,设置可观察性是余烬的一部分。对象的初始化过程何时设置可观察性?在初始化之后?父组件的值在init.Yup之前、init之后分配给子组件的属性。据我所知,设置可观察性是Ember.Object初始化过程的一部分