在Ember应用程序中,假设您有观察者或观察阵列的属性,如下所示:
topContributor: (function() {
// ... loop over articles (hence slow) ...
}).property('articles.@each.author')
通过例如ember-data更新articles
数组,重复触发属性函数总共articles.length
次。
有没有办法在所有更改完成并刷新runloop后将更新折叠为一个延迟更新?
答案 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')