7

Ember アプリで、次のように、配列を監視するオブザーバーまたはプロパティがあるとします。

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

articlesたとえば、ember-data を使用して配列を更新すると、プロパティ関数が合計で繰り返しトリガーされますarticles.length

すべての変更が完了し、ランループがフラッシュされたときに、更新を 1 つの遅延更新に折りたたむ方法はありますか?

4

1 に答える 1

10

次の指針について @wagenet と @krisselden に感謝します。

現時点では、バインディングは遅延 (遅延) されていますが、オブザーバーと拡張により計算されたプロパティはすぐにトリガーされます。将来的には、それらも延期される可能性があります

それまでの間、回避策としてEmber.run.onceを使用して、1 回だけ実行される遅延関数呼び出しをスケジュールできます。計算されたプロパティは、同じパターンに従うオブザーバーに簡単に変換できると思います。次に例を示します。

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

_updateTopContributorObserver: (function() {
  Ember.run.once(this, 'updateTopContributor');
}).observes('articles.@each.author')
于 2012-09-17T22:47:02.043 に答える