LZX言語とJavaScript 2
JavaScript
OpenLaszloのJavaScriptは、ECMAScript(ECMA-262)に準拠したスクリプト言語です。変数の型がゆるいといった特徴があります。JavaScriptのコードは、script・method・handlerタグの中に記述できます。
JavaScriptのコードはタグの中に記述するので、&・>・<といった特殊文字はタグ一部と認識されてしまい、そのままでは使用できません。
<script>
// < は < で記述しないとコンパイルエラーになる
if (a < 5) {
:
省略
:
}
</script>
JavaScriptのコードを<[CDATA[ ・・・ ]]>で括れば、<を記述してもコンパイルエラーになりません。
<script><[CDATA[
// < を記述してもコンパイルエラーにならない
if (a < 5) {
:
省略
:
}
]]></script>
グローバル変数、グローバル関数
scriptタグにJavaScriptを記述すると、アプリケーション全体からみえるグローバル変数、どこからでも呼び出せるグローバル関数になります。
<?xml version="1.0" encoding="UTF-8"?>
<canvas debug="true">
<script><![CDATA[
var g_value = 100;
function test(a) {
return g_value + a;
}
]]></script>
</canvas>
LZX言語と同様に、JavaScriptで記述した部分を別ファイルにまとめて記述しておき、インクルードして使用することができます。
<?xml version="1.0" encoding="UTF-8"?>
<canvas debug="true">
<!-- common.lzxをインクルード -->
<include href="./common.lzx"/>
<script><![CDATA[
//グローバル関数のtestを呼び出す
Debug.write(test(50));
]]></script>
</canvas>
<?xml version="1.0" encoding="UTF-8"?>
<library>
<script><![CDATA[
var g_value = 100;
function test(a) {
return g_value + a;
}
]]></script>
</library>
クラスのメソッド
LZX言語はオブジェクト思考の言語なので、classタグでクラスを定義することができます。クラスのメソッドをmethodタグに記述します。
<class name="MyClass">
<!-- 引数で値を2つ渡し、a + bの計算結果を返すメソッド -->
<method name="methodA"
args="a,b">
<![CDATA[
return a + b;
]]>
</method>
<!-- 引数で値を2つ渡し、a - bの計算結果を返すメソッド -->
<method name="methodB"
args="a,b">
<![CDATA[
return a - b;
]]>
</method>
</class>
MyClassクラスのmethodAを呼ぶときは以下のようにします。
<script><![CDATA[ var a = new lz.MyClass(); //MyClassを生成する var b; //bに10 + 20の計算結果30がセットされる b = a.methodA(10, 20); ]]></script>
イベントハンドラ
ボタンをクリックしたときの処理はhandlerタグに記述します。実装方法が3種類あります。
- 方法1. buttonのonclick属性にロジックを記述する方法です。お手軽ですがソースが煩雑になり後から見ると見にくいものになるため、お勧めできません。
<?xml version="1.0" encoding="UTF-8"?>
<canvas debug="true">
<button onclick="Debug.write('テストです')">JavaScriptのテスト</button>
</canvas>
- 方法2. handlerタグをbuttonの入れ子にして追加してロジックを記述する方法です。画面の記述とロジックが混在することになるので、画面のコントロールの数が多くなるとソースが煩雑になり後から見ると見にくいものになるため、お勧めできません。
<?xml version="1.0" encoding="UTF-8"?>
<canvas debug="true">
<button>JavaScriptのテスト
<handler name="onclick">
<![CDATA[
Debug.write('テストです');
]]>
</handler>
</button>
</canvas>
- 方法3. buttonに ID属性 or name属性を設定して、handlerタグに関連づけてロジックを記述する方法です。画面の記述とロジックを分離することができます。
<?xml version="1.0" encoding="UTF-8"?>
<canvas debug="true">
<button id="btnTest">JavaScriptのテスト</button>
<handler name ="onclick"
reference="btnTest">
<![CDATA[
Debug.write('テストです');
]]>
</handler>
</canvas>
