keyboard-input exampleのHandleKey以外のアクションからのキーボードイベントの登録を解除するにはどうすればよいですか? (質問は、ハロゲンバージョン2.0.1とpurescript 0.11.4に関連しています)ハロゲンキーボード入力の例とイベントの参加を解除する?
この例では、入力/戻りが機能します。クローズボタンを押してマウスでつぶすことができる要素のグループがあり、クローズアクションがそれを処理します。また、Enter/Returnを使用して要素を折りたたむことができ、必要に応じて機能します。
Open next -> do
st <- H.get
if not st.open
then do
H.modify (_ { open = true })
eval (H.action Init)
else pure unit
pure next
Close next -> do
H.modify (_ { open = false })
st <- H.get
case st.unsubscribe of
Nothing -> pure unit
-- Just smth -> H.liftAff smth
Just _ -> H.modify (_ { unsubscribe = Nothing}) -- H.liftAff us
pure next
Init next -> do
H.modify (_ { open = true})
document <- H.liftEff $ DOM.window >>= DOM.document <#> DOM.htmlDocumentToDocument
H.subscribe $ ES.eventSource'
(K.onKeyUp document)
(Just <<< H.request <<< HandleKey)
-- H.modify (_ { unsubscribe = ??? })
pure next
問題は、私はマウスを使って(崩壊)の要素を閉じたときに、イベントリスナーが削除されていない(行っていない)、それはまだそこになるということです。要素をもう一度開くと、上記のコードで2番目(3番目、4番目など)のリスナーが作成され、すべてのキー押しが何度も処理されます。
私はキーボードイベントを作成することを検討していましたが、ここで正しい方法は聞こえません。
だから、質問は以下のとおりです。
- キーボードリスナーがすでに存在しているかどうかを確認する方法は?
- そして、Close-Actionで停止する方法は?
- また、完了したSubscribeStatusを作成し、それをClose-Actionでキーボードリスナに送信することはできますか?
さらに質問:
- example状態で
unsubscribe
を持っています。それの使い方?
は(私は、init -actionにして閉じる-actionでそれに何かを入れてみましたが、それは純粋な推測だった。)
後期編集: これはについての質問に関連しているようですdynamically attached event listenersおよびthis,thisおよびthisも参照のこと。
答えの1つは、状態を使用してダイナミックハンドラについて知ることが可能であり、それが私の問題のためのトリックでした。とにかく、ここに記載されている質問は残っていると思います(ハロゲンのハンドラを取り除く方法、特に例の脱退フィールドについてはどうしたらいいですか?)
ますイベントソース。私は良い解決策を見つけるときに答えを書くでしょう。 – Albtzrly