丸一日かかって書けたソース
東京に行くまでにあげておきたい仕事があって、時間切れ寸前だった。
着地を考えると今朝がリミットだった。
まあ、今までのやり方でもできるのだが、せっかくなので、少し頑張ることにした。
こちら様のページの情報にお世話になったのである。
僕はperlで文字列を変数に入れ込む事が多いので、こういうパターンになる。
javascriptではハッシュは使ったことがなかったので楽しみである。
perlはおおよそ不自由無いのだが、javascriptはそうでもないのが辛い。
今まではperlから値を返してもらった所で一つ一つ値を区切ってidの付けてあるオブジェクトに配置した。
結構perlで細かく値を区切ったりしてjsに送っていたのがうざかったのだが、これで配列でハッシュを送れば良いようになった。
とは言っても、「idの付けてあるオブジェクトに配置」の所は、ほとんど一緒なのである。
それでも、サーバーとのやり取り、js側での処理は共に楽になる。
何よりも「出来た感」がたまらない。
これが学習の意味であろう。
var conf_t=new Array;
var wname=$(location).attr('hash');
param=param+"&wn="+wname;var rtn = load_main(param);////cgiから配列を受け取る部分
var arr = rtn.split(/\r\n|\r|\n/);
for (i = 0; i < arr.length; i++) {
if(r_arr=arr[i].match(/^(.*)\t(.*)$/)){
conf_t[r_arr[1]]=r_arr[2];//////////////////ここが出来なかった。
}
}
880959
なぜ、javascriptでハッシュが重要な役割をするかというと、htmlをページに読み込んだ後で動的にいろいろな名称などをセットする必要があるのだ。
サイトの題名の様な選択したデータや状況で変化する項目を表示する必要があるのだ。
10-20のデータのセットがあった場合に、それぞれのデータを選択するたびに項目が変わるとすると結構な手間である。
おまけに仕様は変わるから、項目が追加されたり、変更(分解、結合、要素分け)されたりする。
そんな時にサーバーからバラバラに項目を分けて(タブで区切った10個の値を受け取るって結構なもんだろ?)送られると、変更が結構な手間になる。何番目が何かとかわからなくなるのよね。
簡単な一つの変更(項目の追加とかね)が大騒ぎになる原因である。
ソースの複雑さはゾーッとする。
perlでフィールドを作って格納して、必要な時に取り出してそのたびにブラウザから取りに行くのだ。
これも、js側でハッシュで持っていればいつでもサーバーに取りに行かないで追加できる。
今後は、ページのロード時にウインドウにオブジェクトを作り、キーと値で格納する。
もう一つ困るのはjs側でnセットである。
同じ値を別な所に入れたいことが有る。
オブジェクトのidで特定して値を格納するとなるとこれまた困るのである。
そこで、rool(=役割)というプロパティを作ってハッシュのキーをいれることにした。
ページロードの時にroolというプロパティを探して、見つけたら、ループさせてセットすることにした。
この部分は、僅かな時間で出来たが、大変な時間の節約になる。
function set_conf_hash(){
var conf_t_Keys = Object.keys(conf_t);
for (var i = 0, len = conf_t_Keys.length; i < len; i++) {$("[rool="+conf_t_Keys[i]+"]").each(function(){ ////////この書き方がわからなかった。
$(this).html(conf_t[conf_t_Keys[i]]); /////////////////////htmlに格納する
$(this).val(conf_t[conf_t_Keys[i]]); /////////////////////テキスト入力のときにはこちら
});
}
}
htmlにはこんな感じでオブジェクトを配置する。
idでないから幾つでも大丈夫。
<span rool="tournament_name1"></span>
<input type="text" rool="tournament_name1">
まいったな、どうして、10年前に知っていなかたんだろうか。
これから10年、どれだけ知らないことを知ることができるだろうか。
perlを選んでよかった。
What You Don't Know Won't Hurt You
最初の頃はプロトタイプであったが、今はすっかりjQuery である。
881338