💎

ruby.wasm における removeEventListener の設定方法

に公開

ruby.wasmaddEventListener を利用する方法は公式ドキュメント にも載ってるし、調べたらちょくちょく出てくるけど、 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