2013-07-30 3 views
2

У меня есть массив объектов в моем файле Javascript, который мне нужен для доступа из js_of_ocaml. Я придумал это до сих пор:Js.js_array от Javascript; coerce, get/set

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, но не получить/установить.

(Другой вопрос, если принуждать фактически правильно?)

ответ

1

Использование Js.array_get/array_set или Js.Unsafe.get/комплект.

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, поэтому добавьте еще один «_».

Сложите все это вместе ...

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 
Смежные вопросы