Shandy Nantz wrote:
I would like to use the link_to_remote method in my controller so I can update a list within my .rhtml file without having to re-load the entire page. Basically, what I am doing is adding stuff to a list and then allowing that stuff to be deleted from the list if the user so chooses - all with the built-in AJAX functionality. The idea is that I do not want the entire page to re-load. I'm thinking that there is an eval() method that I can use but have not yet discovered it. Anyone have any ideas?
Put the snip of rHTML that needs to refresh into a partial. Include it the normal way, like this:
<div id='refresh_me'> <%= render :partial => 'my_partial' %> </div>
Now wire link_to_remote up to an action that looks like this:
def my_action return unless request.xhr? render :update do |page| # <-- I call that rjs sometimes! page.replace_html 'refresh_me', :partial => 'my_partial' end end
The deal is that almost* anything you can pass to render, you can also pass to the second argument to JavaScriptGenerator#replace_html.
The first code injects raw HTML into your page as it renders, before it goes over the wire. The second snip renders the partial, then creates JavaScript containing Element.update('refresh_me', '<my partial html codes>'). This goes over the wire, and the Ajax handlers from prototype.js will replace the innerHTML member of that <div id='refresh_me'> with the new version.
(Question for the lifers - is it _really_ "almost anything"? Or is it "anything"!?)