問題
ワーカーのリストを表示するビューがあります。このビューには、という名前のコントローラーメソッドを呼び出すボタンがありますrefresh
。もともと私はcontent
このリストに設定していましたが、UIがちらつくことに気づきました。これは、タイマーで実行すると特に厄介です。
以下を使用して、ちらつきなくすべてを機能させることができました。
App.WorkersIndexController = Ember.ArrayController.extend
refresh: ->
console.log 'refreshing workers'
# set a property to a new collection
@set 'refreshing', App.Worker.find()
# observer that watches the new collection load
update: (->
refreshing = @get 'refreshing'
return unless refreshing.get('isLoaded')
# what this question is about...
Ember.run =>
@set 'content', refreshing
).observes('refreshing.isLoaded')
ご覧のとおり、更新されたコンテンツを一時変数に設定し、コンテンツの読み込みを監視してからコンテンツを更新しています。Ember.run
ちらつきを完全に取り除く呼び出しを追加するまで、コンテンツのちらつきは少なくなりました。
ちらつきが発生している理由と、ちらつきがなくなる理由は理解しEmber.run
ていますが、私の質問は、ちらつきに頼らずにこれを解決するための最良の方法は何Ember.run
ですか?Ember.runに電話するのは、一種の最後の手段のように感じます...どんな助けでも大歓迎です!
編集:また、私は残り火のデータを使用していません。メソッドは次のfind
ようになります。
App.Worker.reopenClass
find: ->
console.log 'loading workers'
workers = Em.A []
request = $.getJSON '/api/admin/workers', (data) =>
console.log ' -> loaded workers'
data.forEach (d) =>
worker = App.Worker.create(d)
worker.set 'isLoaded', true
workers.pushObject(worker)
request.error =>
console.log ' -> failed to load workers'
workers.set 'isFailed', true
request.complete =>
workers.set 'isLoaded', true
workers