1

假设我使用 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)

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

4

1 回答 1

2

好的,为了转换为(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)
于 2016-03-10T13:40:24.440 回答