[Ror-es] Ajax + render :update

Esteban
Mon Feb 5 17:23:32 GMT 2007


Xavier Noria wrote:

>
>Por lo tanto a priori sin :update deberia funcionar. Podrias por  
>favor enviar algo de codigo?
>
>-- fxn
>  
>

Xavier,

Te paso mi código a ver si encuentras algo raro, te paso la variante con 
platilla RJS en comentario viene para usar sin RJS. Uso backgroundRB 
para iniciar una tarea de larga duración pero eso funciona bien. Te 
agradezco cualquier ayuda que me puedas brindar.


*En el Controlador*

 # dibuja el form
 def daily bonus
  end
 
 # la acción que llama el submit del form
 def daily_bonus_start
    if request.xml_http_request? then
      args = {:time => Abstract.sysdate, :userid => params[:userid]}
      session[:daily_points_job_key] = MiddleMan.new_worker(
        :class => :daily_points_worker,
        :args => args) unless session[:daily_points_job_key]
    else
      redirect_to :action => :menu
    end
  end

# def daily_bonus_start
#    if request.xml_http_request? then
#      args = {:time => Abstract.sysdate, :userid => params[:userid]}
#      session[:daily_points_job_key] = MiddleMan.new_worker(
#        :class => :daily_points_worker,
#        :args => args) unless session[:daily_points_job_key]
#      render :update do |page|
#        page.show 'progress'
#        page.replace_html 'progress_percent', '0%'
#        page<<(periodically_call_remote(:url => {:action => 
'daily_bonus_progress'}, :frequency => 2))
#      end
#    else
#      redirect_to :action => :menu
#    end
#  end


  # esta acción es la asociada al periodically_call_remote
  def daily_bonus_progress
    if request.xml_http_request? then
      if session[:daily_points_job_key] then
        progress = 
MiddleMan.get_worker(session[:daily_points_job_key]).progress
        progress_max = 
MiddleMan.get_worker(session[:daily_points_job_key]).progress_max
        progress_percent = (100 * progress / progress_max).to_i
        render :update do |page|
          page.call('progressPercent', 'progress_percent', progress_percent)
          page.redirect_to(:action => 'daily_bonus_done') if 
progress_percent >= 100
        end
      else
        render :nothing => true
      end
    else
      redirect_to :action => :menu
    end
  end

  # al llegar al 100% se llama esta acción
  def daily_bonus_done
    session[:daily_points_job_key] = nil
    flash[:message] = 'Daily Bonus calculation finished successfully'
    redirect_to :action => :menu
  end


*En la vista*

daily_bonus_start.rjs

page.show 'progress'
page.replace_html 'progress_percent', '0%'
page<<(periodically_call_remote(:url => {:action => 
'daily_bonus_progress'}, :frequency => 2))

daily_bonus.rhtml

<%= form_remote_tag :url => {:action => :daily_bonus_start} %>
<%= hidden_field_tag 'token', session.session_id %>
<%= submit_tag "Proceed", :disabled => if  == :running then 
:disabled else nil end %>
<%= end_form_tag %>


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.simplelogica.net/pipermail/ror-es/attachments/20070205/72431c5c/attachment.htm