今回は、ダイアログを出すのに 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 件のコメント:
コメントを投稿