トップ «前の日記(2006-05-14) 最新 次の日記(2006-05-16)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2006-05-15

_ 日本で最初の濃い読書会

やっぱり、ターヘルアナトミア読書会だろうなぁ。

しかもMLとか無いし。

_ JavaScript難しいよ

と、困り果てる。

AJAXを利用してXMLではなくHTML片を読み込み組み込むページがある。

<%= link_to_remote ... :update => 'foo' ... %>
<div id='foo'></div>
上からこんなのが降ってくる。
<input type='button' id='bar' value='push me!' onclick='bar();'>
<script type='text/javascript'>
function bar() {
 ...すごく長い
 ...たくさんの行
}
</script>>

でも、これは思ったように動作しない。bar()の呼び出しが「オブジェクトでサポートされていないプロパティまたはメソッドです」になるからだ。windowオブジェクトに追加されてるとは思うのだが、なるものはしょうがない。

だらだらonclickのところに書けばよいのだが、何しろ長いのなんのって、ちゃんとインデントとか付けて改行しまくって書きたいよ。

こういうテがないわけではない(Rails使っているのでRubyで書ける範囲は楽だな)。

<%= button_to_function _('push me !'), escape_javascript(<<END
 ....たくさんたくさん
 ....もっとたくさん
END
)%>

試してないから嘘かも知れないけど。

でも、この場合、ボタンはもっといっぱいあって、共通の関数になる部分も山ほどある。でも地のHTMLにincludeできないのはその時にならないとどういうスクリプトになるかわからないからだ(ということにしておく)。

で、苦し紛れに次のようにしたんだけど、もっと良い方法があるだろうと思う。気づいてないだけか、絶対的にこのあたりの知識が不足してるか、どっちか。多分、後者だろうと思ってるからだが。

<input type='button' id='bar-button' value='push me!' onclick='$("bar-button").bar();'>
<script type='text/javascript'>
$("bar-button").bar = function() {
 ...すごく長い
 ...たくさんの行
}
</script>>

教えてやってもいいよという方、おいででしたらお願いします。

本日のツッコミ(全5件) [ツッコミを入れる]
_ ムムリク (2006-05-15 11:32)

rdf データで示されている URI が ://monde/diary/... のようになっているようなのですが。わたしの環境だけでしょうか?

_ arton (2006-05-15 11:38)

ご指摘感謝。ちょっと中からいじれなくなっていて直接イントラ名でアクセスして更新してしまいました。<br>直しておきます。

_ arton (2006-05-15 11:42)

あ、そうか。フィードリーダが次の読み取りするまではキャッシュが見えるのか。←liveDoor reader 見に行ってなぜ反映されてないか一瞬悩んだ。

_ とおりすがり (2006-05-15 13:41)

scrpitタグを動的に追加して、その内容を実行させるには、<br>スクリプトの内容を外部スクリプトにして、<br>DOMのappendChildを使って、scriptタグを追加しないとダメですよ。<br>でもRailsは使ったこと無いので、見当違いかもしれませんが。<br>(prototype.jsにはscriptタグの内容を抜き出して、evalしてくれたかもしれません。それならfunctionの定義を明示的にwindowのプロパティに代入するようにすればOKかも)

_ arton (2006-05-15 13:50)

>DOMのappendChildを使って、scriptタグを追加しないとダメですよ。 <br>なるほど。それで実行はされる(上で僕が取った方法は静的にfunctionで定義するのをあきらめて、動的に1ショットで実行させて関数を組み込んでいるだけなわけだから)のに、windowには組み込まれないということなのですね。<br>>でもRailsは使ったこと無いので、見当違いかもしれませんが。 <br>Rails云々は、サーバーサイドでの書き方だけだから関係ないと思います。最初のDOMに組み込まれないという説明で納得が行きました。<br>prototype.jsは読むのが辛いので$()みたいな単純なのしか利用してなかったですが、なるほど、そういう機能もありそうですね。<br>どうもありがとうございます。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|

ジェズイットを見習え