2016-06-07 12 views
0

Ich versuche Eliom jetzt, um zu sehen, was ich damit machen kann. Ich möchte eine externe Javascript-Bibliothek von meinem Eliom-Client-Code aufrufen. Der Beispielcode ich versuche ist die folgende:Aufruf einer externen JS-Bibliothek von Eliom Client-Code

[%%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() 
] 

Entspricht dem einfachen javascript:

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

Ein einfacher Anruf Three.js von OCaml-Code. Nun bin ich mir der Syntax noch nicht zu 100% sicher, aber was ich beobachte, ist, dass THREE nicht definiert ist, weil dieser Code vor dem Laden von Three.js ausgeführt wird.

Wie kann ich entweder: 1) js-Dateien vor dem von js_of_ocaml; oder 2) Three.js in die generierte js-Datei aufnehmen; oder 3) andere Option?

Derzeit ist die Seite auf diese Weise erzeugt:

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

Danke im Voraus

Antwort

0

ich den Ursprung meines Problems und der Lösung gefunden.

Ich entdeckte, dass das Problem in der Tatsache war, dass js Skripte standardmäßig mit dem Attribut "Defer" enthalten sind (und so interpretiert werden, nachdem die Seite vollständig geladen wurde).

Nach vielen Sondieren, ich habe einen Weg gefunden, um die Seite mit einem Skript zu generieren interpretierte vor OCaml generierte js, muss sie „manuell“ enthalten sein:

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 ....)