Fetching contributors…
Cannot retrieve contributors at this time
53 lines (49 sloc) 1.77 KB
@author Kevin Smith (
@version 0.1
@title erlang_js: A Friendly Erlang to Javascript Binding
erlang_js aims to be a simple and easy to use binding between Erlang and Javascript. erlang_js is packaged as an OTP application so it's easy to integrate.
<h3>Quick N' Dirty</h3>
<li>Make sure the <code>sasl</code> application is running.</li>
<li>Start <code>erlang_js</code>.</li>
<li>Create a Javascript VM via <code>js_driver:new/0</code>.</li>
<li>Use the <code>js</code> module to execute Javascript.</li>
<h4>Defining and calling a function</h4>
{ok, Port} = js_driver:new().
ok = js:define(Port, &lt;&lt;"function my_add(x, y) { return x + y; }"&gt;&gt;).
js:call(Port, &lt;&lt;"my_add"&gt;&gt;, [100, 50]).
{ok, 150}
<h4>Using a user-defined initializer</h4>
InitFun = fun(Port) -> js:define(Port, &lt;&lt;"function my_square(x) { return x * x; }"&gt;&gt;), ok end.
{ok, Port} = js_driver:new(InitFun).
js:call(Port, &lt;&lt;"my_square"&gt;&gt;, [3]).
<h4>Using bindings</h4>
InitFun = fun(Port) -> js:define(Port, &lt;&lt;"var my_constant = 100; function constant_mult(x) { return x * my_constant; };"&gt;&gt;), ok end.
{ok, Port} = js_driver:new(InitFun).
js:call(Port, &lt;&lt;"constant_mult"&gt;&gt;, [5]).
{ok, 500}
js:call(Port, &lt;&lt;"constant_mult"&gt;&gt;, [5], [{&lt;&lt;"my_constant"&gt;&gt;, 200}]).
{ok, 1000}
<h4>Using ejsLog to debug</h4>
JS = &lt;&lt;"function my_add(x, y) { ejsLog(\"/tmp/foo.txt\", \"Hello, world!\"); return x + y; }"&gt;&gt;.
ok = js:define(Port, JS).
%% Logging output is automatically timestamped and written to /tmp/foo.txt
%% when the function runs
{ok, 84} = js:call(Port, &lt;&lt;"my_add"&gt;&gt;, [42, 42]).