2013-07-30 31 views
2

我有一個對象數組,我需要從js_of_ocaml訪問我的Javascript文件。我想出了這個至今:來自Javascript的Js.js_array;脅迫,獲取/設置

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