从Eliom客户端代码调用外部Js lib

时间:2016-06-07 18:24:44

标签: js-of-ocaml ocsigen

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

UPDATE PRODUCT AS PR
INNER JOIN orderdetail AS OD ON OD.ProductID = PR.ID
SET PR.Quantity = PR.Quantity - OD.Quantity
WHERE OD.OrderID = pintID

相当于简单的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()
]

从OCaml代码中简单调用Three.js。 现在,我还没有100%确定语法,但我观察到的是三个未定义,因为这个代码在加载Three.js之前执行。

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

目前,该页面是以这种方式生成的:

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

提前谢谢

1 个答案:

答案 0 :(得分: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 .... )