如何在 addEventListener 中安排 removeEventListener?
How to schedule a removeEventListener inside an addEventListener?
我正在尝试定义一个可以触发自身删除的事件侦听器。
通常的方式是定义监听器,然后在调用addEventListener时引用。并在调用 removeEventListener 时使用相同的引用。由于 Purescript 是一种严格的语言,我似乎不能那样做,因为我无法引用我正在定义的侦听器。
import Web.Event.EventTarget
do
listener <- eventListever (\event -> do
somethingUsefulWith event
_ <- removeEventListener evType listener' false target
pure unit
)
addEventListener evType listener false target
我希望 listener' 是 listener 但是,因为这是不可能的,我不知道是否有简单的解决方案。
目前的解决方案是使用 Ref
.
import Effect.Ref as Ref
example = do
listenerRef <- Ref.new Nothing
listener <- eventListener \event -> do
Ref.read listenerRef >>= traverse_ \listener -> do
removeEventListener evType listener false target
Ref.write (Just listener) listenerRef
addEventListener evType listener false target
我正在尝试定义一个可以触发自身删除的事件侦听器。
通常的方式是定义监听器,然后在调用addEventListener时引用。并在调用 removeEventListener 时使用相同的引用。由于 Purescript 是一种严格的语言,我似乎不能那样做,因为我无法引用我正在定义的侦听器。
import Web.Event.EventTarget
do
listener <- eventListever (\event -> do
somethingUsefulWith event
_ <- removeEventListener evType listener' false target
pure unit
)
addEventListener evType listener false target
我希望 listener' 是 listener 但是,因为这是不可能的,我不知道是否有简单的解决方案。
目前的解决方案是使用 Ref
.
import Effect.Ref as Ref
example = do
listenerRef <- Ref.new Nothing
listener <- eventListener \event -> do
Ref.read listenerRef >>= traverse_ \listener -> do
removeEventListener evType listener false target
Ref.write (Just listener) listenerRef
addEventListener evType listener false target