2

我的 Javascript 文件中有一组对象,我需要从 js_of_ocaml 访问这些对象。到目前为止,我已经想出了这个:

let table_decks = (Js.Unsafe.variable "table_decks" :> 
  < deck_nr : int > Js.js_array Js.t)

在 Javascript 中,数组将table_decks = {{deck_nr: 10, ...}, {deck_nr: 20, ...}}包含更多字段,而不仅仅是deck_nr.

我的问题是:我如何访问这个数组?我在 中找到了很多函数Js.js_array,但没有 get/set。

(另一个问题是强制是否正确?)

4

1 回答 1

1

使用 Js.array_get/array_set 或 Js.Unsafe.get/set。

val array_get : 'a #js_array t -> int -> 'a optdef
val array_set : 'a #js_array t -> int -> 'a -> unit

为了支持 ocaml 的重载,js_of_ocaml 删除了 javascript 名称中最后一个 _ 之后的字母。所以“deck_nr”在生成的js中变成了“deck”,所以再加一个“_”。

把所有的放在一起...

let table_decks = (Js.Unsafe.variable "table_decks" :>
  < deck_nr_ : int Js.prop > Js.t Js.js_array Js.t)

let get a n =
  match Js.Optdef.to_option (Js.array_get a n) with
  | Some n -> n##deck_nr_
  | None -> 0
于 2013-07-30T05:16:00.643 回答