Ember Computed Property与Ember Observer

时间:2016-08-08 12:06:39

标签: ember.js

我在此处看到的所有先前问题似乎都没有涵盖何时使用Ember Computed Property与Ember Observer的主题。我知道Computed Property使用以前的属性来帮助生成新属性,并在运行循环中更新。

Person = Ember.Object.extend({
  // these will be supplied by `create`
  firstName: null,
  lastName: null,

  fullName: Ember.computed('firstName', 'lastName', function() {
    return `${this.get('firstName')} ${this.get('lastName')}`;
  })
});

另一方面,观察者在运行循环之外更新,甚至可以观察任何计算属性。它会对任何类型的变化做出反应。

Person = Ember.Object.extend({
  // these will be supplied by `create`
  firstName: null,
  lastName: null,

  fullName: Ember.computed('firstName', 'lastName', function() {
    return `${this.get('firstName')} ${this.get('lastName')}`;
  }),

  fullNameChanged: Ember.observer('fullName', function() {
    // deal with the change
    console.log(`fullName changed to: ${this.get('fullName')}`);
  })
});

然后,Ember文档指出观察者通常过度使用。有人能给出正确使用观察者的更好例子吗?他们还能看到什么,以及错误使用与正确使用的影响是什么?

源代码可以在ember文档中找到:https://guides.emberjs.com/v2.3.0/object-model/observers/

1 个答案:

答案 0 :(得分:6)

  

Computed Property使用以前的属性来帮助生成新属性,并在运行循环中更新

是的,但懒洋洋地 - 仅在引用时有意义,其依赖项更改已使缓存值无效。

  然后,Ember文档指出观察者通常过度使用。

是的,观察者会在观察到的属性发生变化时同步触发,即使原因是要重新计算不会使用的内容。使用观察者来计算应该计算的属性是经典的Ember反模式之一。

我检查了一些我工作的大型应用程序,发现观察者正在使用某些内容,例如在发生变化时根据需要调用某些第三方库,或者在选择新的UI语言时更改应用程序的语言。

相关问题