LzDelegateって

なにもの?よく見かけるし、ようわからんし・・・、でいろいろ試してみた。

<?xml version="1.0" encoding="UTF-8"?>

<canvas debug="true">
	<button name="button1">ボタン
		<attribute name="listenValue" type="number" value="0"/>
		<method event="onclick">
		    Debug.write(this.name + ":ボタンが押された" );
        </method>
        <method event="onmouseover">
            this.setAttribute("listenValue", this.listenValue + 1 );
        </method>
    </button>
    
    <!--  使い方:1 イベントとの連動 -->
    <view name="view1">
        <method event="oninit">
            // 時クラス内のメソッドをbutton1のonclickイベントに連動させる
            var delegate = new LzDelegate(this, "listenOnclick");
            delegate.register(parent.button1,  "onclick");
        </method>
        <method name="listenOnclick">
            Debug.write(this.name + ":buton1のonclickと連動中");
        </method>
    </view>
    
    <!--  使い方:2 attributeとの連動 -->
    <view name="view2">
        <method event="oninit">
            // 時クラス内のメソッドをbutton1のonclickイベントに連動させる
            var delegate = new LzDelegate(this, "listenAttribute");
            // "on" + attribute名
            delegate.register(parent.button1, "onlistenValue");
        </method>
        <method name="listenAttribute" args="v">
            Debug.write(this.name + ":buton1のlistenValueの値変更に反応:" + v );
        </method>
    </view>
    
    <!--  使い方:3 そのまま実行:リフレクションっぽい? -->
    <view name="view3">
        <method event="oninit">
            // 時クラス内のメソッドをbutton1のonclickイベントに連動させる
            var delegate = new LzDelegate(this, "eventExec");
            delegate.execute();
        </method>
        <method name="eventExec">
            Debug.write(this.name + ":executeでも実行できる");
        </method>
    </view>
</canvas>

要するに

  • イベントを拾って、実行
  • 値の変更も拾える
  • そのまま実行も出来る、リフレクションっぽく

非同期でいろいろ動くLaszloでは、必須の項目なんでしょうね。これ学んだら、少しだけ開眼しました。

あ、それとJavaRPC関連が何とか分かってきたので近々S2とつなげてみよう!