从 Eliom 客户端代码调用外部 Js 库
Calling an external Js lib from Eliom client code
我现在正在试用 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 是未定义的,因为这段代码是在加载 Three.js.
之前执行的
我该怎么做: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 .... )
提前致谢
我找到了问题的根源和解决方案。
我发现问题出在默认情况下,js 脚本包含在 "defer" 属性中(因此在页面完全加载后进行解释)。
经过多方探索,我找到了一种在OCaml生成的js之前解释脚本生成页面的方法,它必须"manually"包括:
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 .... )
我现在正在试用 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 是未定义的,因为这段代码是在加载 Three.js.
之前执行的我该怎么做: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 .... )
提前致谢
我找到了问题的根源和解决方案。
我发现问题出在默认情况下,js 脚本包含在 "defer" 属性中(因此在页面完全加载后进行解释)。
经过多方探索,我找到了一种在OCaml生成的js之前解释脚本生成页面的方法,它必须"manually"包括:
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 .... )