2017-03-09 111 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所以激活意味着使用這裏的屬性 –