忍者ブログ
ブログツール、2007/11/06作成
[44] [43] [42] [41] [40] [39] [38] [37] [36] [35] [34
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

またはまってしまった。

はまったのは、link_to_remoteの:afterオプション。

データをまとめて投入するために、CSVファイルとかをアップさせて、
それを利用してデータ投入したいときとかがある。

出来ればチェックを行っておいて、
それでOKならデータ投入、等の操作をしたいとする。

そんなとき、普通にフォームだけで最後まで突き進もうとしたとき、
あまりにファイルが大きすぎるとか、
チェック操作やデータ投入操作が冗長で時間がかかったりすることはままある。

で、(パフォーマンスチューニングして何とかしろ、というのはおいといて)
タイムアウトを避けたり、あ~、これ、動いてんのかな~?
というユーザーの疑惑の目を避けるため、
ひとまず、ファイルを受け付けたよ、というページに遷移してから、
更にチェックなり、データ投入なりをする操作をしてもらうようにしようと。

そのときに、link_to_remoteでページを部分的に遷移させ、
:afterオプションで処理中の画面を描画する。

処理中の画面は、単なるテキストでもいいんだけど、せっかくだから
アニメGIFを使って処理中のものを見せようと。

というわけで、処理中のページを作成して、
:afterオプションの中でrender :partialして見せる。
呼び出し側はこんな感じ

<%= link_to_remote "時間のかかる処理", :update=>'update_column',
                                   :submit=>'params_column',
                                   :after=>"Element.update('update_column','#{render :partial=>'processing_page'}')",
                                   :url=>{:controller=>'hoge',
                                          :action=>'fuga'} %>

で、やってみたら全然ページが切り替わらない。
Javascriptのエラーみたい。

いろいろタイプミスや、オプションの順番とかを調べて見るも、全くわからない。

で、FireBugでソースを見てみてふと気づいた。
render :partialで描画されるページの中身って、Javascriptのパラメータにそのまま入ってる。

そうです。
render :partialするページで改行してはダメだったんですねえ。

教訓:

Javascriptの中に展開される可能性のある部分では、
改行は一切禁止

ということでした。
PR
この記事にコメントする
name
title
color
mail
URL
comment
pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
secret (チェックを入れると管理人だけに表示できます)
この記事へのトラックバック
この記事にトラックバックする:
ついめ~じ
ブログ内検索
フリーエリア
サニーカメラ
Powered by Ninja Blog    template by Temp* factory    icon by MiniaureType

忍者ブログ [PR]