如何使用js_of_ocaml添加onclick方法?

dor*_*mon 4 javascript ocaml js-of-ocaml

嗨,假设我有一个带ID的按钮,form-submit我的OCaml文件中有以下功能:

let () =
   let form_submit = Dom_html.getElementById "form-submit" in
   ...
Run Code Online (Sandbox Code Playgroud)

向按钮添加on_click方法的正确方法是什么?我应该这样做吗?

  form_submit##onclick <- ...
Run Code Online (Sandbox Code Playgroud)

但是处理函数的类型是什么?我在文档中找不到它.

Dru*_*rup 5

你可以手动使用dom东西,但这不是很方便.正确的方法是使用Lwt_js_events使用Lwt在事件处理程序上构建抽象的模块.

这是一个最小的例子:

Lwt.async (fun () ->
  Lwt_js_events.clicks form_submit
    (fun _ev _thread -> Lwt.return () )
  )
Run Code Online (Sandbox Code Playgroud)

第一个参数是事件对象,第二个是循环线程.您可以使用开头的常规构造非常精细地调整处理程序的行为.

Lwt.async这里确保处理程序将在"好的时候"放置到位(在这种情况下,启动lwt调度程序时).使用它比忽略结果更好,因为它可以确保正确的调度.