I have been try to make a page where a user can add something to a list
and then delete something from the same list all without re-loading the
page. The adding part is easy, but the deleting part is turning out to
be a pain.
A user by the name of Philip gave me some very helpful hints:
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"!?)
--
Phlip
http://www.oreilly.com/catalog/9780596510657/
"Test Driven Ajax (on Rails)"
assert_xpath, assert_javascript, & assert_ajax
This does not work, however, it just reloads the entire page within the
list. Does anyone have any other ideas or sugestions. I realize that I
am probably implementing the above code wrong, but I have tried every
way that I can think of. Thanks,
~s
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
It looks like this. ''hotel_info-refresh'' is the name of the div and ''delete_hotel_info'' is the name of the method that does the destroy. I will try giving each item an id. <%= link_to_remote ''Delete'', :update => ''hotel_info_refresh'', :action => ''delete_hotel_info'', :id => @user.id %> Thanks again, for your help. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> I have been try to make a page where a user can add something to a list > and then delete something from the same list all without re-loading the > page. The adding part is easy, but the deleting part is turning out to > be a pain. > > A user by the name of Philip gave me some very helpful hints: 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"!?)I haven''t come across anything that I couldn''t send back yet...> This does not work, however, it just reloads the entire page within the > list. Does anyone have any other ideas or sugestions. I realize that I > am probably implementing the above code wrong, but I have tried every > way that I can think of. Thanks,What does your link_to_remote look like? It should just update the ''refresh_me'' div with the result of the partial ''my_partial''. Also, if you want to delete an item, another idea would be to assign each item it''s own id. Say <div id=''my_item_123''>This is item 123</div> ... Then in your delete action (or link to method for that action in a callback on success) use an event to simply remove that element from the page. Then nothing has to update, and the item simply goes away after deleting it. -philip --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> It looks like this. ''hotel_info-refresh'' is the name of the div and > ''delete_hotel_info'' is the name of the method that does the destroy. I > will try giving each item an id. > <%= link_to_remote ''Delete'', :update => ''hotel_info_refresh'', :action => > ''delete_hotel_info'', :id => @user.id %>Did you just mis-type the dash vs underscore in your div id and the value of :update? Otherwise it looks okay to me. Oh Wait! If you''re passing in :update, you don''t need to do a page.replace_html in your action. Just render the partial with :layout => false. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
I had to place the :action is side the :url as well as the the
parameters that I was passing. After I did that everything worked fine.
link_to_remote ''Delete'', :url => { :action =>
''delete_hotel_info'', :id
=> @user.id, :hotel => @hotel.id }, :update =>
''hotel_info_refresh''
Thanks Philip
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---