2008-11-04 12 views
7

Je rends un rail partiel et je veux alterner la couleur de fond quand il rend le partiel. Je sais que ce n'est pas super clair alors voici un exemple de ce que je veux faire:formatage conditionnel dans les rails partiels

Row Un fond gris Row Deux fond jaune Ligne Trois Fond gris Row Quatre fond jaune
  • coutures stackoverflow désolé pour empêcher les couleurs de fond d'être montré, mais je pense que cela rend mon idée claire

C'est le code de la vue que j'utilise

<table> 
    <%= render :partial => 'row' :collection => @rows %> 
</table> 

les regards partiels _row.html.erb comme celui-ci

<tr bgcolor="#AAAAAA"> 
    <td><%= row.name %></td> 
</tr> 

Le problème est que je ne sais pas comment changer l'arrière-plan Couleur pour tous les autres rangs. Y a-t-il un moyen de faire cela?

Répondre

18

Vous pouvez utiliser l'assistant Cycle. Quelque chose comme ceci:

<tr class="<%= cycle("even", "odd") %>"> 
    <td><%= row.name %></td> 
</tr> 

Ou dans votre cas, utilisez bgcolor à la place, bien que je recommanderais en utilisant des classes CSS.

Vous pouvez faire défiler plus de deux valeurs: cycle ('first', 'second', 'third', 'and_more'). Il y a aussi: reset_cycle ('nom_de_cycle') Ceci assure qu'à chaque itération, vous recommencerez avec votre première valeur de la liste de cycles.

Vérifiez les rails documentation pour plus d'exemples.

+1

Si vous utilisez plusieurs listes ou tables sur une page, je recommande de nommer vos cycles. Passez simplement: name => 'some_unique_name' à la fin du cycle ('a', 'b', ...) appel. –

0

Une autre idée, vous pouvez utiliser javascript pour changer le style de l'élément basé sur (nombre total de TD% 2).

De cette façon, tous vos éléments visuels sont contenus dans la couche html/css/javascript. Là encore, cette technique ne fonctionne pas si javascript est désactivé.

0

Il y a un "gotcha" avec cycle: Si vous devez ajouter à la chaîne, le cycle se brise. Par exemple,

cycle('odd', 'even') << " some other classes" 

rompra le cycle. Cependant, inversant l'ordre ou la construction d'une chaîne fonctionne très bien:

"some other classes " << cycle('odd', 'even') 
"#{cycle('odd', 'even')} some other classes" 

Je n'ai pas (encore) ont fouillé dans la source pour voir pourquoi cela peut être. En outre, j'utilise Rails 3.2.x

Questions connexes