苦労したので投稿しよう・・・。
- 調査
- 方向性の転換
- 結果
(2011/10/7)
こちらの方が多分綺麗。inlineで作ってもいい。
http://seo-trial.blogspot.com/2011/09/rails-controllerview.html
こちらの方が多分綺麗。inlineで作ってもいい。
http://seo-trial.blogspot.com/2011/09/rails-controllerview.html
1.調査
Railsと親和性が高そうなjqgrid(http://www.2dconcept.com/jquery-grid-rails-plugin)を調査。
jsonで表示する値を取得するのはajax系gridの定番の処理なので気にしない。
リンクを埋め込むにはcontrollerでlink_toをするのが簡単かな?書いてみた。
- h=ApplicationController.helpers
- h.link_to('Destroy',:confirm => 'Are you sure?', :method => :delete)
調べると、url_helper.rb内のjavascriptを出力する関数で
authenticity_tokenが取得できずに動かない。
2.方向性の転換
showなどは動くので「仕様」として受け止め、解決策を見つけることにした。
独自のhelperでLINK_TOが出力する内容を(token以外)そのまま出力するものを用意。
出力するauthenticity_tokenにはhtml内で重複しないであろう値をダミーで出力。
jqgridがjsonの値を読み込み終えた段階(grid_loaded)でjQueryで塗り替えることとした。
以下、紆余曲折の結果。
(scriptタグ付けると削除する仕様ですか、googleさん・・・orz)
<script language="Javascript">
function GetAuthenticity_Token() { return "<%= form_authenticity_token %>"; }
function test() {
var u = $('#logs a[onclick]')
if (u) {
u.each(function() {
var v = String($(this).attr('onclick')) //関数を文字列化
v = v.replace("|authenticity_token|", GetAuthenticity_Token); //ダミーの置換
eval("m = " + v); //文字列を関数に変換。vはfunction(){}の形式
$(this).removeAttr("onclick"); //onclickは不要。可読性の為削除
$(this).bind("click",m); //OK
})
}
}
</script>
IE8、chrome、firefoxで動いた。
ここに至るまで丸一日かかったけどね・・・。
0 件のコメント:
コメントを投稿