1

私は今、Eliom を使って何ができるか試しています。eliom クライアント コードから外部の JavaScript ライブラリを呼び出したいと考えています。私が試しているコード例は次のとおりです。

[%%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 への単純な呼び出し。現在、構文についてはまだ 100% 確信が持てませんが、Three.js をロードする前にこのコードが実行されるため、THREE が未定義であることがわかります。

1) js_of_ocaml によって生成されたファイルの前に js ファイルを含めます。または 2) 生成された js ファイルに Three.js を含めます。または3)他のオプション?

現在、ページは次のように生成されています。

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

前もって感謝します

4

1 に答える 1

1

問題の原因と解決策を見つけました。

問題は、デフォルトで js スクリプトが「defer」属性に含まれている (したがって、ページが完全にロードされた後に解釈される) という事実にあることがわかりました。

多くの調査の後、 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 .... )
于 2016-06-11T14:01:55.307 に答える