2017-03-09 112 views
2

为什么下面的代码不相同?EmberJS - 观察计算属性

随着计算:

computed: Ember.computed('selected', function() { 
    console.log('computed'); 
    return this.get('selected'); 
}), 

observer1: Ember.observer('computed', function() { 
    console.log('observer1'); 
}), 

observer2: Ember.observer('selected', function() { 
    console.log('observer2'); 
}), 

随着别名:

computed: Ember.computed.alias('selected'), 

observer1: Ember.observer('computed', function() { 
    console.log('observer1'); 
}), 

observer2: Ember.observer('selected', function() { 
    console.log('observer2'); 
}), 

第一种只打印observer2,第二个打印observer1observer2

+0

你在哪里设置或使用'selected'属性?给烬捻它将帮助我们玩 – kumkanillam

+0

https://ember-twiddle.com/9889ca948285d7ef2cb75d8c6e5942b2?openFiles=templates.application.hbs%2C – Charles

回答

1

第一个,computed只是一个getter。因此,如果您在模板或其他地方不使用computed来对更改作出快速反应,则不会通过更改selected来调用它。

但在第二个,别名也创建setter。所以如果你改变selected,computed之后很快就会改变。

如果您在模板的第一个中使用computed,则会得到相同的结果。

+0

好的,有没有办法避免使用计算器来“激活”它? – Charles

+0

@Charles计算属性是一个属性。而一个财产只是为了运载数据,显示数据。如果你在改变发生时需要一些过程,观察者是正确的。 –

+0

@Charles所以激活意味着使用这里的属性 –