忍者ブログ
ブログツール、2007/11/06作成
[48] [47] [46] [45] [44] [43] [42] [41] [40] [39] [38
×

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

前の記事でも書いた、render_componentにまつわる問題を解消すべく、
ヘルパを作ってみた。

render_componentの問題点は、以下の二つ。

1.request.xhr?で必ず読み出した元Viewのrequest.xhr?の結果が返される。
2.全ての処理が終わってからリクエストが返るので、レンダリングが遅い。

render_componentでは、
1.viewファイルを解釈
2.render_component登場
3.コントローラで処理
4.コントローラのrender :partialをレンダリング
5.レンダリング結果をViewに差し込む
6.次の行を解釈
という風に、とにかく全ての処理が流れてしまう。

で、2.~5.までの処理をとにかく速く終わらせて戻し、
実体部分は非同期で別に呼び出す方向で考える。

というわけで、ヘルパにdelayed_render_componentを作ってみた。

  def delayed_render_component(options)
#    code = "Element.update('#{options[:update]}','#{render :partial=>'common/progressing'}')"
    code = "new Ajax.Updater(#{remote_function(options)})"
    javascript_tag(code)
  end
 
使い方はlink_to_remoteを参照。
出来れば、Ajax.Updaterが戻る迄の間、プログレスアイコンでも表示したい所なんだけど、
なかなかうまくいかない。

というのも、ターゲットの書き換えだけならまだしも、
書き換えではなく、書き足し(要素を最後に挿入(:position=>'bottom'とか))などしたときに、
Element.Updateを使えないから。

対象の書き換えだけなら、
コメントアウトした行を復活させるだけでいいんだけどねえ・・・

書き足しの時には、
1.プログレスアイコンを表示するエレメントを挿入
2.Ajax.Updaterが戻って、エレメントが挿入される
3.1.のエレメントを削除

というプロセスを経なければならないという・・・

はじめから要素にランダムなIDを振ればよいかというと、
レンダリングされた要素の中身でIDを対象としていろいろ操作するのでそうも行かない。

何かいい解決方法を考えなくっちゃね。
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]