如果我有一个仅依赖于CP(“父”)的观察者(“孩子”),是否有任何理由在父母之前触发/运行子函数?当我更新父母依赖的道具之一时,这似乎就是我所看到的......
更多细节:
.on('didInsertElement')
当我说模板“间接”消耗父CP时,我的意思是它实际上是父CP的两个相关CP,它们直接在模板中使用,而不是父本身。但是这两个函数都获取父CP,所以我很确定它应该具有相同的效果 - 在初始渲染期间首先消耗父CP
这是一个有希望制作的组件的简化示例 这更清楚一点:
import Ember from 'ember';
export default Ember.Component.extend({
didInsertElement() {
console.log('didInsertElement called');
},
didRender() {
console.log('didRender called');
},
parentCP: Ember.computed('someOtherProp.[]', function() {
console.log('called parentCP')
return something;
}),
myObserver: function() {
console.log('called observer');
this.get('parentCP');
// ... do something
}.observes('parentCP').on('didInsertElement'),
childCP1: Ember.computed('parentCP', function() {
console.log('called child CP 1');
this.get('parentCP');
// ... compute
}),
childCP2: Ember.computed('parentCP', function() {
console.log('called child CP 2');
this.get('parentCP');
// ... compute
}),
});
这是初始渲染的序列:
(这基本上是我所期待的)
但是,当我向someOtherProp
添加元素时,序列如下所示:
这是预期的吗?特别是两件事:
 (很明显,#2实际上并不令人惊讶,但不是我认为CP的工作原理)
答案 0 :(得分:2)
正如@locks在Ember懈怠中向我解释的那样:
这是预料之中的,因为观察者都很渴望:一旦对其依赖关系所依赖的道具进行任何更改,它们就会立即触发
并且,因为在这种情况下,Observer访问父CP,它会导致它接下来触发。该结果被缓存,然后由两个子CP使用