如何在Emberjs中的`computed`之后调用一个方法

时间:2017-08-04 05:42:05

标签: javascript ember.js

我需要在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.
    })
});

提前致谢。

此方法的目的是将卡提供给下一页。

2 个答案:

答案 0 :(得分:0)

只要代码的某些部分(直接或间接)调用this.get('nameOfComputedProperty'),就会调用computed property中的回调。

在调用之后,结果值(无论回调返回)是否被缓存,并且只有在任何依赖属性的值发生更改时才会再次计算(通过调用回调)。

对于您的特定示例,只要您在组件中调用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();
  }
}

另一种方法是使用observer,但应注意这通常是最后的手段:

onChange : Ember.observer('card','selectedCard', function(){
  this.triggerSomething();
})

答案 1 :(得分:0)

类中未定义cardselectedCard。记录到控制台的计算属性也应该返回属性的值。

只有在任何依赖项更改(如果在模板中某处读取它)时,才会计算计算属性:

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并记录。