使用具有定时队列排放的Ember观察者

时间:2015-04-22 20:26:35

标签: javascript ember.js ember-cli debouncing

我试图建立一个"通知系统"广播覆盖的种类基本上我捕获事件,将它们添加到数组,然后我运行一个观察该数组的函数。每次添加一个事件时,我都会运行一个花费一定时间的动画,从阵列中删除它然后移动到下一个。

我发现debounce让我成为那里的一部分。我可以在动画运行时添加任意数量的事件,并且能够清空队列。

问题是,我必须在处理第一个事件之前等待指定时间(在这种情况下为5秒)。然而,当我将debounce设置为立即时,一切都会中断,第一个事件将立即处理,但没有其他事情会发生。

# Pool handling.
pool: []

# Function adds events to the pool array.
addEventToPool: (event, data) ->
  console.log "added #{event} with #{data} to pool!"
  @get('pool').pushObject(data)

# Function that observes the pool array and runs debounce 
# if there are any items in the pool.
observePool: (->
  Ember.run.debounce(@, @handleEvent, 5000, false) if @get('pool').length
).observes('pool.[]')

# Event handling.
handleEvent: ->
  pool = @get('pool')
  object = pool.get('firstObject')
  @set('payload', object)

  Ember.$(".event-message__#{object.event}").addClass('active')

  Ember.run.later (->
    Ember.$(".event-message__#{object.event}").removeClass('active')
    pool.removeObject(object)
  ), 2000

  console.log "Number of remaining objects: #{pool.length}."
  console.log "Objects remaining: #{JSON.stringify pool}."

我觉得我需要离开debounce来解决这个问题,但我不确定解决方案是什么。

如果您需要澄清,请与我们联系!

0 个答案:

没有答案