ぽざうねっと

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  420  : 記事  0  : コメント  9457  : トラックバック  76

ニュース

さて、今年は何を漬けようか

書庫

日記カテゴリ

Accessory

Community

Private

※このエントリは、(多分)間違っていませんが非推奨です。
生の JavaScript を出力したい場合は page << 'script' を使用しましょう。
try & error だけで何とかしようとせず、基本的な事ぐらい調べましょうという自戒を込めて、そのままにしてあります。

Rails には RJS という機能があり、AJAX 通信時に ruby のソースから JavaScript を生成してレスポンスとして返す事ができる。
そのうちの機能の一つに、page.call がある。
page とは、画面というかドキュメントを表すオブジェクトで、JavaScript でいう document オブジェクトみたいなもの。
page.call は引数の関数を実行してくれる。
たとえば、page.call 'hoge' となっていた場合、実際のブラウザ上では hoge(); が実行される。
また、関数に引数を渡すこともでき、page.call 'alert', 'foo' とすると、alert("foo"); が実行される。
複数引数にも対応しており、page.call 'alert', 'foo', 'bar' とすると、alert("foo", "bar"); が実行される(この例だと意味ないけど)
第一引数に指定された名前の関数を実行するだけの page.call だが、仕組みとしては (); を付け加えてレスポンスに流すだけである。
なので、page.call '(function() {if(confirm("ok?")){alert("hoge");}})' とすれば、(function() {if(confirm("ok?")){alert("hoge");}})(); という無名関数の実行ができる。
要するに、どんな JavaScript も実行できるということになる。
ちなみに、page.call 'eval', 'if(confirm("ok?")){alert("hoge");}' としても同じ事ができる。
また、第二引数以降は全て文字列として渡される。その際、" で囲まれるのだが、文字列内に " が含まれていても、ちゃんとエスケープしてくれるので安心である。

これを使えばどういう事ができるかというと、私はよく編集パネルのポップアップなんかで使う。
のような感じ。(これは、jRails で jQuery を利用した例だけど)

あとは、サーバー側で検証を行い、確認のダイアログを出して ok なら再度通信する。という(割とよくある)パターンにも利用できる。
簡単なサンプルを作ってみた
以下、サンプルのソース。
<!-- app/views/rjs_page_call/index.html.erb -->
<% form_remote_tag :url => { :action => :test } do %>
  <%= hidden_field_tag :confirmed %>
  <%= submit_tag :ok, :style => 'width: 60px', :id => 'ok' %>
<% end -%>
投稿日時 : 2009年1月28日 1:42

コメント

# re: RJS における page.call のちょっとしたまとめ 2018/07/23 15:38 billtao
http://www.braindumpnow.com Coach Bags Outlet
http://www.wowconomics.com Coach Outlet Online
http://www.nscodecenter.com Coach Outlet Online
http://www.votecap.ca Michael Kors Outlet Canada
http://www.40ozbounce-tube.net Michael Kors Outlet
http://www.lassalsitas.com Michael Kors Sale
http://www.babychangingtabletips.com Cheap Jordans For Sale
http://www.cattywampuslife.com Cheap Jordans For Sale
http://www.ezrims4rent.com Cheap NFL Jerseys From China
http://www.july17action.org Wholesale NFL Jerseys
http://www.kellyheatingandairoh.com Cheap Authentic NFL Jerseys
http://www.naturewisefarm.com Authentic NFL Jerseys
http://www.amdrumassn.org Wholesale NFL Jerseys
http://www.theoldglorydrumshop.com Official NFL Jerseys
http://www.chinchworld.com Cheap NFL Jerseys From China


# re: INI 編集ツール IniModifier を作成してみる (1) 2018/08/20 13:41 chenlixiang
2018.8.20chenlixianghttp://www.nikefree-5.com
http://www.ghdhair.me.uk
http://www.gucci.in.net
http://www.airmax90.in.net
http://www.air-max-2017.net
http://www.reebok.us.org
http://www.cheap-jordans.in.net
http://www.orologi-rolex.it
http://www.nikeoutletonline.org
http://www.jordan31.org
http://www.poloralph.in.net
http://www.swarovskicrystaljewelrys.us.com
http://www.nike--store.fr
http://www.michael--korsoutlet.ca
http://www.ferragamosunglasses.us
http://www.oakleys-sunglasses.net.co
http://www.nike-freerun.com
http://www.kobe10.us
http://www.nikeairmaxinc.net
http://www.air-jordanshoes.net
2018.8.20chenlixiangコメント

Post Feedback

タイトル
名前
Url:
コメント: