2011年1月11日火曜日

[Rails3] prototype_legacy_helper

Rails3になってUJS(UnobtrusiveJavaScript)が推奨されるようになり、 rails.js がコアとして動作するようになったのは時代に乗ってる感じでいいのだけれど、いかんせんドキュメントもサンプルも少ないのが現状なので、以前のヘルパも使いたくなってくるのが人情というもの。

例えば「link_toヘルパに :remote をつけて特定のtext_fieldの内容を送信」という動作をさせるにはどうすればいいのか、いくら検索してもさっぱりわからなかった。Creative Commonsにオライリーから出ているRails3本の中身が載っているらしいけれど、やっぱり英語…ということで腰が引けてしまう。

そこで、過去の遺産を使うには prototype_legacy_helper が便利らしい。

$ rails plugin install https://github.com/rails/prototype_legacy_helper

これで link_to_remote などといった旧来のヘルパを扱うことができるようになる。上記「特定の text_field の中身を送信」は link_to_remote:with オプションでばっちり。

...
<%= text_field_tag :address_zipcode %>
<%= link_to_remote "AutoComplete", :url => find_zipcode_path, :with => "'zipcode='+$('address_zipcode').value" %>
...

:with オプションについてはネットにいろいろと情報があるけど、個人的に今回初めて使ったので解説を載っけておく。

ようするに "" で括られたJavaScriptらしい。で、JavaScriptの文字列でなければならず、 :with => "'key1=value1&key2=value2'" と指定すると、 params[:key1] == value1 などになる。 & で区切ってハッシュにしてくれるので、いちいちデータをシリアライズしなくてもいいみたい。

DOMオブジェクトを選択して中身を取り出すのはお馴染 $ 関数に value メソッドだけど、あくまで「JavaScriptの文字列」として渡す = '' で括る必要があるので、少し面倒くさい。そのサンプルは上のコードにある通りで、 "'zipcode='+..." とクォーテーションがいかにも読み辛いけど、Emacsの正規表現に比べたらマシと思えばマシ…かも知れない。

押してねっ→BlogPeople「趣味の世界」ブログランキング

0 件のコメント:

コメントを投稿