Rendering partial and js together

Hello,

I have a form on my page that is popup-like but actually part of the page. it works fine as I used in other page. In order to close it after submission. I do something like         respond_to do|wants|             wants.js do               render :update do |page|                 page << "jq('#message_title, #message_body').val('');"                 page << "tb_remove()"               end             end           end

As requirements change I was to update another DIV with listing so I would like to do something like render :partial => 'client_listing', :locals => {:listing_clients => @listing_clients}

I need to do both together but I can as you can only render once per method with Rails: actionController::DoubleRenderError in SmsController#add_client

Can only render or redirect once per action

Any ideas how I can approach this issue as I need to perform both actions?

Thanks,

Tam

Hi Tam,

Hello,

I have a form on my page that is popup-like but actually part of the page. it works fine as I used in other page. In order to close it after submission. I do something like         respond_to do|wants|             wants.js do               render :update do |page|                 page << "jq('#message_title, #message_body').val('');"                 page << "tb_remove()"               end             end           end

As requirements change I was to update another DIV with listing so I would like to do something like render :partial => 'client_listing', :locals => {:listing_clients => @listing_clients}

I need to do both together but I can as you can only render once per method with Rails: actionController::DoubleRenderError in SmsController#add_client

Can only render or redirect once per action

Any ideas how I can approach this issue as I need to perform both actions?

If I understand you correctly, you can accomplish what you're trying to do by using the RJS replace_html method within the render :update. Assuming there's an element already on the page within which you'd like to render the partial above...

render :update do |page|   page << "jq('#message_title, #message_body').val('');"   page << "tb_remove()"   page.replace_html 'existing_element', :partial => 'client_listing', :locals => {:listing_clients => @listing_clients} end

The 'replace_html' method will replace the html content inside 'existing_element'.

There's also a straight 'replace' method which replaces the html content AND the enclosing element.

I highly recommend Cody Fauser's 'RJS Templates' PDF available at O'Reilly. Very good expenditure of $10.

HTH, Bill