2010年6月23日水曜日

Javascript は好きになれないのな

 いやー、今まで、こんなに突っ込んだ事無かったから、勉強になったのな。推測に過ぎないので、これから書く事は間違っているかもしれないです。

 今回は、ダイアログを出すのに jqModal を使ってるんですが、こいつの中身は ajax でバンバン書き換えるから、1ページにつき、1つしか用意してないわけなんです。iframe を使わないで済むのも気に入ってるところです。

 コードを書いていて、ダイアログを表示して、ウィザード・ページのように状態遷移する度に自己書き換えを ajax で行っていました。ところが、javascript の関数だけが更新されない…。???一体何が???

 冷静に考えてみれば、javascript は DOM 要素じゃないんで、例え inner html ごとゴッソリ入れ替えしても、消えないかもしんないわけです。やや思い悩んだ末に、プレスホルダを利用する事にしました。グローバルに変数定義しておいて、

<javascript defer='defer' type='text/javascript'>
$(function() {
$.hoge_holder = function() { ... }
$.fuga_holder = function() { ... }
});
</javascript>

というように、プレスホルダを更新するという訳です。これなら、だらだらとコードが無尽蔵に追加される訳じゃない。

 話は変わって、jQuery のセレクタで

$('input:name=[hoge]')

みたいにしてたんですが、rails で出力された select要素は、input type='select' ではなく select なわけです。これが、input に該当しないので、また、ハマりました。クソがーーーーーと、怒りながら

$('input:name=[hoge],select:name=[hoge]')

対応したわけなんですが、やっぱ、javascript はどうにも好きになれないかも…。ま、javascript が悪いのか、DOM が悪いのか?

 もひとつ、前々から気に入らないと思っている事があります。DOM要素に属性があり、要素の種類により属性が異なってきます。しかし、javascript 的に見れば、どんなプロパティを追加しようが、それは勝手な話。foo.name が属性なのか、プロパティなのか?ここらへんの感覚にアホ臭さを感じてしまいます。

0 件のコメント: