Ember.js:折叠/推迟昂贵的观察者或计算属性

时间:2012-09-17 21:27:31

标签: ember.js

在Ember应用程序中,假设您有观察者或观察阵列的属性,如下所示:

topContributor: (function() {
  // ... loop over articles (hence slow) ...
}).property('articles.@each.author')

通过例如ember-data更新articles数组,重复触发属性函数总共articles.length次。

有没有办法在所有更改完成并刷新runloop后将更新折叠为一个延迟更新?

1 个答案:

答案 0 :(得分:10)

感谢@wagenet和@krisselden提供以下指示:

目前,虽然延迟(延迟)绑定,但观察者和扩展计算属性会立即触发。将来,他们might become deferred as well

与此同时,您可以使用Ember.run.once作为解决方法来安排延迟函数调用,该函数只会运行一次。我想,计算属性可以很容易地变成观察者,以遵循相同的模式。这是一个例子:

updateTopContributor: function() {
  // ... loop over articles (hence slow) ...
  this.set('topContributor', ...);
},

_updateTopContributorObserver: (function() {
  Ember.run.once(this, 'updateTopContributor');
}).observes('articles.@each.author')