在 js_of_ocaml 的 Dom_svg 中插入 Tyxml_js.Svg 值

Inserting Tyxml_js.Svg values in js_of_ocaml's Dom_svg

假设我使用 Tyxml 的语法创建了一个 SVG 矩形:

let rect_elt = <:svg< <rect></rect> >>

如何使用 js_of_ocaml 的 API 将其插入 DOM 中?

我想做这样的事情:

let _ =
  let rect_elt = <:svg< <rect></rect> >> in
  let svg_elt = Dom_svg.getElementById "graph-svg" in
  svg_elt##appendChild(rect_elt)

但我不知道如何进行正确的类型转换。

好的,为了转换为(resp. from)Dom_svg,必须创建一个 Tyxml_cast.MakeTo(resp.MakeOf)的实例:

module To_dom = Tyxml_cast.MakeTo(struct
  type 'a elt = 'a Tyxml_js.Svg.elt
  let elt = Tyxml_js.Svg.toelt
end)

module Of_dom = Tyxml_cast.MakeOf(struct
  type 'a elt = 'a Tyxml_js.Svg.elt
  let elt = Tyxml_js.Svg.tot
end)

并按如下方式使用它:

let _ =
  let svg_elt = Dom_svg.getElementById "some-svg" in
  let rect_node = <:svg< <rect></rect> >>
    |> To_dom.of_node in
  svg_elt##appendChild(rect_node)