Dude, you have blown my mind. ;-) That explanation makes perfect sense--the partial I call in link_to_function there does indeed have an identical call to cycle (for coloring rows of another table).
I haven't tried link_to_remote, but giving cycle a :name parameter to distinguish it from the other cycle call seems to do the trick--e.g. cycle('line-even', 'line-odd', :name => 'found-rows') Many thanks! -Roy -----Original Message----- From: rubyonrails-talk@googlegroups.com [mailto:rubyonrails-t...@googlegroups.com] On Behalf Of Phlip Sent: Saturday, January 24, 2009 7:41 AM To: rubyonrails-talk@googlegroups.com Subject: [Rails] Re: cycle() not cycling in a partial Pardee, Roy wrote: > I've got the below partial rendering each item of a collection to a table > row, with some nice ajax magic for hiding the row if the user clicks a link. > It works very nicely, except for the bit that assigns the class= attribute to > the tr tag. For some reason I can't figure out, every row is getting > class="line-even". Does anybody have an idea why the cycle() call wouldn't > work here? You have written a real tongue-twister here; two minor misunderstandings that lead to the cycle() canceling itself out! > For extra weirdness, if I include this html comment line right before the > line w/the opening <tr> tag, it *does* work. > > <!-- class="<%= cycle('line-even', 'line-odd') %>" --> eRB cannot comprehend <!-- (because you could eRB any other language with its own comments). Hence, the cycle() runs, and pushes one of those classes into a comment! If you viewed the source, or wrote puts @response.body in your unit test, you would see them. That increment's cycle's ticker by one. > ############### non-cycling partial ######################## > > <% this_found_project_id = "fp_#{found_project.id}" %> > <tr class="<%= cycle('line-even', 'line-odd')%>" id="<%= > this_found_project_id %>"> > <td><%= found_project.name %></td> > <td> > <%= > link_to_function 'add' do |page| This is not Ajax. The code calculates this partial once, at page render time. If that partial calls cycle(), it will increment its tick again. That might cancel out the last cycle(). Then, all this extra HTML gets shoved into this <a> tag's onclick attribute. And this happens for every <tr> in this table. This is just normal JavaScript, not Ajax. > page.insert_html :bottom, > "roster", > :partial => 'tumor_sites/tumor_sites_project', > :object => TumorSitesProject.new(:project_id => > found_project.id) > page.hide this_found_project_id > end > %> > </td> > </tr> Comment the comment out with <%# cycle ... %>. Then use link_to_remote(), not link_to_function(). It's only Ajax if the render :update is inside a real controller action. -- Phlip --~--~---------~--~----~------------~-------~--~----~ 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@googlegroups.com To unsubscribe from this group, send email to rubyonrails-talk+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---