Я пытаюсь создать своего рода «систему уведомлений» для наложения вещания. По сути, я ловлю события, добавляю их в массив, а затем запускаю функцию, которая наблюдает за этим массивом. Каждый раз, когда добавляется событие, я запускаю анимацию, которая занимает заданное количество времени, удаляю ее из массива и затем перехожу к следующей.
Я обнаружил, что debounce
помогает мне в этом. Я могу добавить любое количество событий во время выполнения анимации, и это может очистить очередь.
Проблема в том, что я должен ждать указанное время (в данном случае 5 секунд), прежде чем будет обработано первое событие. Однако, когда я устанавливаю немедленное отключение, все прерывается тем, что первое событие будет немедленно обработано, но больше ничего не будет.
# 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
, чтобы исправить это, но я не уверен, что это за решение.
Пожалуйста, дайте мне знать, если вам нужны какие-либо разъяснения!