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