💎
ruby.wasm における removeEventListener の設定方法
ruby.wasm で addEventListener を利用する方法は公式ドキュメント にも載ってるし、調べたらちょくちょく出てくるけど、 removeEventListener は全然出てこなくて困った。
やっとやり方がわかったので個人のメモを兼ねて書き残しておく。
結論
JS.try_convert を使う。
サンプルコード
下記のように try_convert で wrap した処理を callback として渡した場合、意図した通りに removeEventListener が機能して addEventListener で設定した listener が消えてくれる。
func = JS.try_convert(->(event) { result[:innerText] = 'clicked' })
button.call(:addEventListener, "click", func)
button.call(:removeEventListener, "click", func)
実装例(removeEventListener が機能してくれない場合を添えて)
その他
Rubyだけで仮想DOMを実装してみる の記事が debug にとても役立ったので感謝。
Discussion