我需要在computed
完成后调用方法。目前我正在添加一个class
名称,该名称工作正常,但我的方法不会记录结果。
import Ember from 'ember';
export default Ember.Component.extend({
classNameBindings: ['isSelected:highlight'],//adding class as expected
firstBalanceType : '',
firstBalanceAmount : '',
lastBalanceType : '',
lastBalanceAmount : '',
isSelected : Ember.computed('card', 'selectedCard', function(){
return this.get('card') === this.get('selectedCard');
}),
creditCard : Ember.computed('card','selectedCard', function(){
console.log("card is", this.get(selectedCard)); //nothing consoles.
})
});
提前致谢。
此方法的目的是将卡提供给下一页。
答案 0 :(得分:0)
只要代码的某些部分(直接或间接)调用this.get('nameOfComputedProperty')
,就会调用computed property中的回调。
在调用之后,结果值(无论回调返回)是否被缓存,并且只有在任何依赖属性的值发生更改时才会再次计算(通过调用回调)。
对于您的特定示例,只要您在组件中调用this.get('creditCard')
,并且第一次调用或'card'
或'selectedCard'
值已更改,就会调用回调。
不要忘记HTMLBars(在模板中)可以调用场景背后的属性获取者。这意味着如果你的模板中有creditCard
的任何绑定也可以触发回调(使用相同的缓存规则)
如果您希望在某些值发生变化时发生某些事情,您只需在进行更改时触发该功能,就不需要计算属性。
例如,如果您有更改card
或selectedCard
的操作,您可以在那里做出反应:
actions: {
setCard(card) {
this.set('card', card);
this.triggerSomething();
}
setSelectedCard(card) {
this.set('selectedCard', card);
this.triggerSomething();
}
}
另一种方法是使用observer,但应注意这通常是最后的手段:
onChange : Ember.observer('card','selectedCard', function(){
this.triggerSomething();
})
答案 1 :(得分:0)
类中未定义card
和selectedCard
。记录到控制台的计算属性也应该返回属性的值。
只有在任何依赖项更改和(如果在模板中某处读取它)时,才会计算计算属性:
a: 1,
b: 1,
sum: Ember.computed('a', 'b', function () {
console.log('hello')
return this.get('a') + this.get('b')
})
首先没有任何东西会记录,然后如果你.get('sum')
它将记录并返回2.然后如果你再次回来什么都不会记录。然后你可以.set('a', 3)
但没有任何东西会记录(是的,你没有读过sum
)。然后,如果你得到总和,它将返回4并记录。