问题
我有一个显示工人列表的视图。这个视图有一个按钮,它调用一个名为 的控制器方法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 是最后的手段......任何帮助将不胜感激!
编辑:另外我没有使用 ember 数据。该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