如何在 Emberjs 中"计算"之后调用方法



我需要在完成后调用一个方法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,这些绑定也可以触发回调(使用相同的缓存规则(

如果您希望在某些值更改时发生某些事情,则应在进行更改的任何地方触发该功能,而无需计算属性。

例如,如果您有更改cardselectedCard的操作,则可以在那里做出反应:

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();
})

相关内容

最新更新