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