WCLはもう一手間加えないとダメだな
しつこく Yahoo! Widgets の Widget Class Library ですが。
とりあえずライブラリの存在をチェックして include してグローバルな lib にオブジェクトを作ってやるなんつー単純な作業を毎回書くのはいやなので、それだけをやるコードを書いた。
ついでにどんなコンポーネントがあるのかだけでもライブラリ自身にリストアップしてもらおうと components(), subcomponents() を勝手に追加。(要はファイルシステムをなめて .js ファイルかディレクトリかチェックして配列を返すだけ。)
雰囲気がつかめてきて機嫌がよくなってくる。しかしその先へ行こうとサンプルを眺めてげんなり。
- まず Yahoo.Controls.Theme コンストラクタに Theme の存在するパスを教えてやる(えぇっ!?)
- しかもそのためには Yahoo.Controls クラスのリソースのパスを getResourcePath で取得したうえで、その中の Themes ディレクトリを指定する必要がある(マジっすか)
- つまりこういうこと new Yahoo.Controls.Theme( lib.getResourcePath( 'Yahoo.Controls' ) + '/Themes' )
- こんなのグローバルな lib を自分たちで汚してるんだし、オブジェクトの中で解決してくれよ
- できたオブジェクトに theme 名を与える
- 各コントロールのコンストラクタにはすべてこの theme オブジェクトを与える
- 各コントロールのパラメータはできあがったオブジェクトに対して一つ一つ丁寧にセットしてやる
frmMain = new Yahoo.Controls.Form(theme);
frmMain.text = "Widget Class Library Control Sample";
frmMain.width = 350;
frmMain.height = 400;
...
lblPrompt1 = new Yahoo.Controls.Label(frmMain.theme);
lblPrompt1.autoSize = true;
lblPrompt1.left = 8;
...
以下コントロール分くり返し。
……。
いやぁ。自分で画像作らなくていいのはありがたいよ? ありがたいんだけど、なんでこんなめんどくさいんだよぅ。なーんつーかこう、バラバラな感じ。かといって粗結合で扱いやすいよ!とかでもない。あくまで縦横無尽に共依存。
どないやねん。どないやねーん。
なんかパラメータとかもさ、JSON でドーンとセットしたいじゃんよ。まぁそういうの書けばいいんだと思うけどさ。ぐるぐる回して setter があったらそれに放り込むようなやつ? まぁ自分に書けるかどうか分かんないけどさ1。しかもこのライブラリの setter, getter の書き方って deprecated ですよ? orz
cf. Core JavaScript 1.5 Guide:Creating New Objects:Defining Getters and Setters - MDC
他にもリファレンスを眺めてみると obosolete なのに Widget Class Library のサンプルにはバンバン出てくる書き方とかあったりして、そういうのどうなのよ?とかね。気になるところがボロボロと出てきますね、これ。
たぶんその辺の気持ち悪さが解消されればめっちゃ便利になるんじゃないかと期待はしてるんだけどなぁ。自分で書かなきゃいけないんですかねぇ。WCL そのもののバージョンアップなんてそんなすぐにはないですよね…。
setter 一覧とか getter 一覧て取れそうもないですなぁ。Ecmascript 4 ではできそうな気がするんだけど。 ↩