JHuizingh wrote: > I'm having an issue with the design of my views that I can't seem to > wrap my head around. I have a page where I am showing a collection of > objects in a list. The way that I designed it, it looked something > like this: > > main view: > > <h2>here is the list</h2> > <ul> > <%= render(:partial => "items/item", :collection => @items %> > </ul> > > > collection item's view: > > <li id="<%= dom_id(item) %>"> > ... INFO ABOUT item.... > </li> > > > This works great, creating a <ul> that is full of <li>'s. I hit a > snag when I start trying to update individual <li> items with ajax > calls. The :update option for link_to_remote() and related functions > doesn't give me an option to replace the dom element that it refers to > as far as I can tell. It lets me specify a dom id that I can change > the innerHTML of, insert the returned html with in it at the beginning > or the end, before or after the element, but it doesn't seem to allow > me to REPLACE the element. > > So a call like this: > > remote_function(:url => credential_search_instance_path > (credential_search_instance), > :method => :put, > :update => dom_id(item) > ) > > Will replace the html inside of the <li> element, so it would update > the page to look like this: > > <li id="item_1"> > <li id="item_1"> > ... INFO ABOUT item.... > </li> > </li> > > > I ended up getting around the issue by checking if it is an xhr > request in my item view like this; > <% if ! request.xhr? then %> > <li id="<%= dom_id(item) %>"> > <% end %> > ... INFO ABOUT item.... > <% if ! request.xhr? then %> > </li> > <% end %> > > That solution works, but it seems very inelegant and adds a lot of > noise to the view. Is it really true that I can't replace the dom > element? Am I missing something? Is there a better way to design my
The best solution would be to move the li tags to a layout: render :partial => "items/item", :collection => @items, :layout => 'li' Where _li.html.erb contains <li><%= yield %></li> However this is broken in 2.2.2 (it instead renders a collection of the collection). I've created a ticket: http://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/1688 So until this works, the other options are: 1. Replace the collection with a loop, either using the layout option, or putting the li tags in the main view, 2. Create a second level of partial, or 3. Remove the :update option and use outer-HTML replace RJS calls. -- Rails Wheels - Find Plugins, List & Sell Plugins - http://railswheels.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 [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---

