flexのValidatorを使っているときに、ふと疑問におもったので調べることにした。
というのも、チェックしたい値があるオブジェクトと、エラーを出力したいオブジェクトが異なるときに一体どうすればいいのだ?はたまた、Validatorはもうちょっと使いやすくならないだろうか?

と思ったのがきっかけだ。そもそも、Validatorの例などをぶらぶらとみて使っているだけなので、
もっと応用がきくような気がするのだ。

という事で、Validatorを使うときには

<mx:Validator id=”v1″ required=”true” source=”f1″ property=”text” />
<mx:TextInput id=”f1″ />
<mx:Button click=”{v1.validate()}” />

なんて感じにつかうようにサンプルが書いてある。

さて、このValidatorは実際には値のチェック以外に何をしているのだろうか?

では、Validatorのソースを見ていくことにしよう。

まず、肝となる部分が、
Validator内部の処理の
[AS]
addEventListener(ValidationResultEvent.VALID,IValidatorListener(actualListener).validationResultHandler);
addEventListener(ValidationResultEvent.INVALID,IValidatorListener(actualListener).validationResultHandler);
[/AS]
という処理だ。
このIValidatorListenerというインターフェースだが、このインターフェースはUIComponentは実装されているのだ。
したがって、ValidatorがValidationResultEvent.VALIDもしくは、ValidationResultEvent.INVALIDを発行して、それを(通常)UIComponentが受け取り、エラー処理をしているのだ。

もうひとつ、上のコード指定されているactualListenerとは一体Validatorタグの中でどこを指しているのだろうか?
これは、実はlistenerもしくはその指定がなければsourceを指すのだ。

ここまでくれば、上の疑問「チェックしたい値があるオブジェクトと、エラーを出力したいオブジェクトが異なるときに一体どうすればいいのだ?」という質問では、listenerにエラーを出力したいオブジェクトを指定すればよいという事がわかるだろう。
この質問はマニュアルをよく読めば答えは書いてあるのだが、どうしてそのようなルールができているのかがわからないと今一つ頭に入ってこないものだが、このように内部をある程度理解した後にマニュアルを読めばすんなりと頭に入ってくる。

では、UIComponentはエラーイベントを受け取り、何をしているのだろうか?
これは、追うのは簡単だ。すでに、イベント処理の登録でどこが動くか分かっている。

validationResultHandler()

の中身を見てみればよい。
細かい処理をいろいろとやっていはいるが、重要なところは、
[AS]
if (msg && errorString != msg)
{
errorString = msg;
dispatchEvent(new FlexEvent(FlexEvent.INVALID));
}
[/AS]
のところだろう。
つまり、errorStringにエラーメッセージを設定しているのだ。

これでValidatorの大体の流れがつかめた。

まあ、簡単に言ってしまえば、Validatorは、

1)エラーメッセージを表示したいUIComponentのvalidationResultHandler()メソッドをイベント処理として登録する。
2)チェック処理をするとValidationResultEventイベントを投げる。

とこれだけだ。

お仕事のご依頼・相談を承ります
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら

Leave a Reply

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2009年9月
« 8月   10月 »
 123456
78910111213
14151617181920
21222324252627
282930  

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ