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
-~----------~----~----~----~------~----~------~--~---

Reply via email to