2016-06-07 65 views
0

我现在正在尝试Eliom,看看我能用它做些什么。 我想从我的eliom客户端代码中调用外部JavaScript库。 我想要的代码示例如下:从Eliom客户端代码调用外部Js库

[%%client 
    let three_lib = Js.Unsafe.js_expr "THREE" in 

    let scene2 = Js.Unsafe.new_obj three_lib##.Scene [||] in 

    let init() = 
    (Firebug.console##log three_lib : unit); 
    (Dom_html.window##alert (Js.string "scene2 created") : unit) in 

    init() 
] 

等同于简单的JavaScript:

var scene2 = new THREE.Scene(); 
function init() { 
    console.log(THREE); 
    window.alert("scene2 created"); 
} 
init(); 

从OCaml的一个简单的代码调用three.js所。 现在,我还没有完全确定语法,但是我观察到的是THREE未定义,因为在加载Three.js之前执行了此代码。

我该如何:1)将js文件包含在js_of_ocaml生成的文件之前;或2)在生成的js文件中包含Three.js;或3)其他选项?

目前,该页面会产生这样:

Eliom_tools.F.html 
    ~title:"Main Page" 
    ~js:[["lib";"three.min.js"]] 
    Html5.D.(body ....) 

预先感谢您

回答

0

我发现我的问题和解决方案的由来。

我发现这个问题是这样的事实:在默认情况下,JS脚本包含了“推迟”属性(从而解释后的页面完全加载)。

多探测后,我找到了一种方法来生成一个脚本的页面演绎得以前的OCaml生成的JS,它必须是“手动”包括:

Eliom_tools.F.html 
    ~title:"Main Page" 
    ~other_head:[Html5.D.script ~a:[a_src 
    (Xml.uri_of_string "lib/three.min.js")] (pcdata "")] 
    Html5.D.(body ....)