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初始化过程的一部分