我正在尝试为广播覆盖构建一个“通知系统”。本质上,我捕获事件,将它们添加到数组中,然后运行一个观察该数组的函数。每次添加一个事件时,我都会运行一个花费给定时间的动画,将其从数组中删除,然后移动到下一个。
我发现这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
来解决这个问题,但我不确定那个解决方案是什么。
如果您需要任何澄清,请告诉我!