Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

kumuでのevent処理

http://d.hatena.ne.jp/yuki_neko_nyan/20060425/1145975300
で書かれてますが綺麗に書けることは重要かなと。
で実際kumuでは?って話。
他のライブラリと同じくリスナーで拾い上げるのがベストかなと。
(他に思いつかん)
使い方としてはイベント処理をする要素のid、event名、コールバック関数を指定します。

sample.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <script type="text/javascript">
function attach(id, name, observer){
  var element = document.getElementById(id);
    if (element.addEventListener) {
      element.addEventListener(name, observer, true);
    } else if (element.attachEvent) {
      element.attachEvent('on' + name, observer);
    }
}

function call(){
  alert('test');
}
      </script>
   </head>
   <body>
      <form name="myForm">
	      <select id="test1"><option>1</option><option>2</option></select>
	      <select id="test2"><option>10</option><option>11</option></select>
      </form>
<script>
attach('test1','change',call);
</script>
   </body>
</html>

combobox連携する時に実際に使うコードですが。
test1の値が変わるとalertが出るはずです。
これがEvenObserverっていってる奴ッス。
こいつを使うといろんなeventと関数(Ajaxとかも)を組み合わせる事が可能です。
まあ実際ライブラリ化する時にはもうちょっと綺麗に書くのと+αなにかかますと思います。
delayはいらないと思うので呼び出しカウンタか、一回だけ呼べるようにするだとか。
あるいはdojoのようにeventとeventを連携させれるようにするかとかね。
(eventとeventの連携は需要ありそうだなあ。)
あと綺麗に書くという意味では

<input type="text" id="auto" kumutype="auto_complete" component="sampleBean.autocomplete" />

でAutoComplete実現みたいな。
HTML拡張系も考えていきたいと思ってます。
(scriptの量を減らす。kumutype属性を勝手に拾ってそいつにscriptを当てるみたいな)
うくく。