我需要在完成后调用一个方法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.
})
});
提前谢谢。
此方法的目的是将卡提供给下一页。
类中既没有定义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 并记录。
每当代码的某些部分(直接或间接(调用this.get('nameOfComputedProperty')
时,都会调用计算属性中的回调。
调用后,将缓存结果值(无论回调返回什么(,并且仅在任何依赖属性的值发生更改时再次计算(通过调用回调(。
对于您的特定示例,每当在组件中调用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();
}
}
另一种方法是使用观察器,但请注意,这通常是最后的手段:
onChange : Ember.observer('card','selectedCard', function(){
this.triggerSomething();
})