で、一度サーバ側で処理が必要な場合が多いので、Rails ではたいてい RJS などを使って AJAX 処理をすると思います。
その場合、helper に処理を書いてしまうのが楽なのですが、引数に page オブジェクトを渡す必要があります。
def popup(page, partial_name, locals)
# popup 内の html を定義してある div を非同期更新
page[:popup].replace_html :partial => partial_name, :locals => locals
# facebox はたしかこんな感じで出せたと思う。うろ覚え
page << '$.facebox($("#popup").html());'
end
でも、page.popup(partial_name, locals) とかけたほうがスマートな気がする。
page オブジェクトは ActionView::Helpers::PrototypeHelper::JavaScriptGenerator のインスタンスなのでこれを拡張してみる。
class ActionView::Helpers::PrototypeHelper::JavaScriptGenerator
def popup(partial_name, locals)
self[:popup].replace_html :partial => partial_name, :locals => locals
self << '$.facebox($("#popup").html());'
end
end
単純に page を self に書き換えただけ。ところがこれだとエラーがでる。
self に [] が定義されていないらしい。
というのも、page オブジェクトの各種メソッドが定義されているのは、さらに内部のモジュールである GeneratorMethods だからみたい。
というわけで、
module ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods
def popup(partial_name, locals)
self[:popup].replace_html :partial => partial_name, :locals => locals
self << '$.facebox($("#popup").html());'
end
end
これで OK
0 件のコメント :
コメントを投稿