放送オーバーレイ用の一種の「通知システム」を構築しようとしています。基本的に、イベントをキャッチして配列に追加し、その配列を監視する関数を実行します。イベントが追加されるたびに、一定時間かかるアニメーションを実行し、それを配列から削除してから、次のアニメーションに移動します。
それ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その解決策が何であるかはわかりません。
説明が必要な場合はお知らせください。