こんにちわ。tutumiです。
Curl初心者です。
on(マクロ)を使わずにEventHandlerを作成しEventTarget にセットする方法はありますか?
ご教授いただきたく宜しくお願いいたします。
又、VLEで作成したレイアウトの個々の要素についてイベントハンドラを割り付ける一般的な方法についても
解ると助かります。
EventHandlerは普通のクラスですから、
普通にEventHandlerインスタンスを作成すること自体は
onマクロを使用しなくても可能です。
ただ、onマクロの方が簡単なのでお勧めはしません。
tutumiさんの期待する回答になっているかわからないのですが、
C#の匿名メソッドやJavaの匿名クラスを用いるような形式で
プログラム中に動的にイベントハンドラを登録したいということでしょうか?
上記だとすると、EventTarget.add-event-handlerメソッドを使えば
イベントハンドラを動的に追加することは可能です。
例えば以下のコードのような例です。
Code:
let e:EventHandler =
{on ValueChanged do
{popup-message "foobar"}
}
||add-event-handlerでイベントを追加
{target.add-event-handler e}
VLEは少しコードに癖があるので正しい書き方を示すのが難しいですが、
私が一番判りやすいと思う書き方は、
画面右のイベントハンドラ欄でイベントを設定し、
イベントの処理に対応するメソッドを別途定義して
それを呼び出す書き方にするのが良いように思います。
判りづらい説明ですみません。
不明な点があったら追記でご質問ください。
こにゃにゃちわ。
リゾート地で、バケーションだったのですっかり焼きナス状態です。
onマクロ使わない方法は、こんなんでいかがっすか?
Code:
{def eh = {EventHandler
Action,
{proc {e:Event, et:EventTarget}:void
{popup-message "Fired....."}
}
}
}
{CommandButton
label = "fire!",
eh
}
もしくはコード内でEventHandlerを追加するには、
Code:
{def cb = {CommandButton
label = "fire!"
}
}
{value
{cb.add-event-handler eh}
cb
}
ただ、この場合でもonマクロを使った方がシンプルかも。。
Code:
{def eh = {on Action do
{popup-message "Fired....."}
}
}
VLEは分からないので、誰かヘルプ!!
-B
いかん、返信している間に、かぶった・・・。
申し訳ナス。
-B
皆様 ご教示頂き、ありがとうございます
小生 既存アプリのRIA化の検討中でcurlについて調査している次第です。
ビュー層について、レイアウトをWYSIWYGに操作できるエディタが存在していて
ビュー層でのmvcをうまく表現できるツールを検討しています。
イベントのハンドラの割付等はレイアウトクラスではなくコントロールクラスで行い
イベントハンドラを拡張してハンドラ実行前後のログ出力等を実施出来ればよいと考えておりました。
ご教示いただく間に、下記のような感じで、割り付ける事は出来る事を確認していたのですが、作ったハンドラをVLEで割り付けることができず悩んでいます。
VLEで割り付けようとすると常にonマクロになってしまいレイアウトクラスに制御内容が混在してしまいます。
curlを利用してのmvc(コンテンツ・レイアウト・コントロール)をうまく分離し、VLEで操作する良い方法は
ありますでしょうか、あるいはcurlらしいつくり方はどのようになるでしょうか。
ソースコード:
||============ onマクロを使わない イベントハンドラ追加方法確認 START
||ハンドラプロシージャ作成
let my-proc:{proc-type {Event, EventTarget}:void}
= {proc {event:Event, eventTarget:EventTarget}:void {output "ccc"} }
||ハンドラ作成 let myActionEventHandler:EventHandler = {new EventHandler, Action,my-proc}
||ハンドラ割付
{self._layout.login-button.add-event-handler myActionEventHandler} {self._layout.login-button.add-event-handler {new EventHandler, Action,my-proc}} ||============ onマクロを使わない イベントハンドラ追加方法確認 END