タグの動的生成(ハンドラ付)

タグをスクリプトで動的生成するときにイベントハンドラを定義する方法。

サンプルではonclickイベントハンドラスクリプトを追加しています。赤い四角をクリックすると色が変わります。

この内容を表示するためには Adobe Flash Plugin が必要です。
(OpenLaszlo4.7.1/swf8)

ソースコード中の★以下のところがポイントです。

<canvas proxied="false" bgcolor="0xeeeeee"> 
  <handler name="oninit"><![CDATA[
    for(var i=1;i<5;i++){
      // ビューの初期状態を設定
      var v = new lz.view(canvas);
      v.setAttribute('name','m_'+i);
      v.setAttribute('width',50);
      v.setAttribute('height',30);
      v.setAttribute('bgcolor',0xff0000);
      var t = new lz.text(v);
      t.setAttribute('text',v.name);
 
      // ★
      // ビューをクリック可能に
      v.setAttribute('clickable',true);
      // ビューにイベントハンドラ用スクリプトを記述
      v.script_for_handler = function () { 
        switch(this.name){
          case "m_1":  // 外部メソッド呼び出しの場合
            canvas.mm_1();  
            break;
          case "m_2":  // 外部メソッド呼び出しの場合
            canvas.mm_2();
            break;
          case "m_3":  // 内部スクリプト実行の場合
            this.setAttribute('bgcolor',0xff00ff);
            break;
          case "m_4":  // 内部スクリプト実行の場合
            this.setAttribute('bgcolor',0xffff00);
            break;
        }
      }
      // イベントハンドラをビューに登録しonclickを関連付け
      var del = new LzDelegate(v, 'script_for_handler'); 
      del.register( v ,"onclick" );     
    }
  ]]></handler>
 
  <simplelayout axis="x" spacing="5"/>
 
  <method name="mm_1">
    m_1.setAttribute( "bgcolor", 0x00ff00);
  </method> 
 
  <method name="mm_2">
    m_2.setAttribute( "bgcolor", 0x0000ff);
  </method>  
 
</canvas>

ただし、この記述の仕方はかなりOpenLaszloぽくないですねー。。

dynamictagwithhandler.txt · 最終更新: 2010/03/28 02:03 by ason
Copyright © 2008~ずっと ason(minamotonoason@gmail.com