タイマーをセットする。
CSVファイルをリスト表示しているページは、ほとんどのアクションがajaxな更新。ページ全体を書き換えるタイミングってあまりない。そうすると気になってくるのがフラッシュメッセージだ。最初に表示されたメッセージが、いつまでも表示されたままになってしまう...。確認操作が不要なメッセージについては、一定時間経過後に自動的に消える方がいい。そう思って、Railsにもタイマーってあるのかな、と調べてみると、ちゃんとあるんですね。periodically_call_remoteで以下のようにやってみた。
- app/views/layouts/csvs.rhtml
- ビュー(レイアウト)
- periodically_call_remoteを以下のように設定すると、10秒ごとに、check_flash_timerアクションを呼び出すようになる。ちなみに:frequency=>10はデフォルト設定になっているようなので、省略してOK。
...(途中省略)... <body> <%= periodically_call_remote :url=>{:action=>'check_flash_timer'}, :frequency=>10 %> <%= render :partial=>"layouts/menu2" %> <%= render :partial=>"layouts/flash" %><%# "layouts/flash"は、div id="flash"タグで囲まれている。 %> <%= yield %> </body> ...(途中省略)...
- app/controllers/csvs_controller.rb
- コントローラー
- 以下のアクションが10秒ごとに呼び出される。瞬時に消えてしまうと、何が起こったのか不安になるので、ビジュアルエフェクトを利用してみた。
- render :update do |p|...endブロック内には、複数のajax処理を記述することができる。
- render :updateブロック内の処理は、10秒ごとに繰り返される。エフェクトのFadeとDropOutでは一度消えてしまうと、再表示されることはなかった。 その他のエフェクトでは、再表示されエフェクトが繰り返された。
...(途中省略)... def check_flash_timer render :update do |p| p.visual_effect(:DropOut, 'flash', :duration => 2) end end ...(途中省略)...
ビジュアルエフェクトについては、以下のページが大変参考になりました。
- Combination Effects Demo in scriptaculous wiki
- HSJ(.g.hatena.ne).jp - HSJ.(中略).jp - いろいろお勉強コーナー - visual_effectのname
以上で、10秒後に、ビジュアルエフェクトと共に、フラッシュメッセージは消え去る。
-
-
- しかし、どうも完全には使いこなせていなくて、:Fadeと:DropOut以外は、メッセージの表示位置がズレた後、エフェクトが始まる...。レイアウトに対するエフェクトだと、ズレてしまうのかもしれない。回避できるのだろうか?
-