如何使用 js_of_ocaml 添加 onclick 方法?
How can I add a onclick method using js_of_ocaml?
嗨,假设我有一个 ID 为 form-submit
的按钮,并且我的 OCaml 文件中有以下函数:
let () =
let form_submit = Dom_html.getElementById "form-submit" in
...
向按钮添加 on_click 方法的正确方法是什么?我应该做这样的事情吗?
form_submit##onclick <- ...
但是处理函数的类型是什么?我在文档中找不到它。
您可以手动使用 dom 东西,但不是很方便。正确的方法是使用 Lwt_js_events
模块,这些模块使用 Lwt 对事件处理程序进行抽象。
这是一个最小的例子:
Lwt.async (fun () ->
Lwt_js_events.clicks form_submit
(fun _ev _thread -> Lwt.return () )
)
第一个参数是事件对象,第二个是循环线程。您可以在开始时使用通用构造非常精细地调整处理程序的行为。
Lwt.async
确保处理程序将就位 "when it's good"(在这种情况下,当 lwt 调度程序启动时)。最好使用它而不是忽略结果,因为它可以确保正确的调度。
嗨,假设我有一个 ID 为 form-submit
的按钮,并且我的 OCaml 文件中有以下函数:
let () =
let form_submit = Dom_html.getElementById "form-submit" in
...
向按钮添加 on_click 方法的正确方法是什么?我应该做这样的事情吗?
form_submit##onclick <- ...
但是处理函数的类型是什么?我在文档中找不到它。
您可以手动使用 dom 东西,但不是很方便。正确的方法是使用 Lwt_js_events
模块,这些模块使用 Lwt 对事件处理程序进行抽象。
这是一个最小的例子:
Lwt.async (fun () ->
Lwt_js_events.clicks form_submit
(fun _ev _thread -> Lwt.return () )
)
第一个参数是事件对象,第二个是循环线程。您可以在开始时使用通用构造非常精细地调整处理程序的行为。
Lwt.async
确保处理程序将就位 "when it's good"(在这种情况下,当 lwt 调度程序启动时)。最好使用它而不是忽略结果,因为它可以确保正确的调度。