2011-04-05 6 views
3
%div{:class => [@item.type, @item == @sortcol && [:sort, @sortdir]] } Contents 

pourrait rendre comme l'un des:S'il vous plaît expliquer ce bout de code haml/documentation

<div class="numeric sort ascending">Contents</div> 
<div class="numeric">Contents</div> 
<div class="sort descending">Contents</div> 
<div>Contents</div> 

Je ne comprends pas vraiment la partie @sortcol && [:sort, @sortdir] de cet extrait.

Répondre

3

Cela repose sur la priorité des opérateurs. Donc, il est évalué comme ceci:

  1. @item == @sortcol est vrai ou faux.
    • quand false
      1. && retours false parce que l'autre partie n'est pas évaluée
      2. donc le code réduit à :class => [@item.type]
    • quand true
      1. && retourne la deuxième partie de l'expression. Dans ce cas, le tableau [:sort, @sortdir]
      2. HAML automatiquement aplanit le tableau avant de rendre ainsi il est équivalent à :class => [@item.type, :sort, @sortdir]
+0

J'ajouterais que même si techniquement le code de travail, c'est assez difficile à lire. Peut-être préférez-vous le déplacer vers un assistant et lui donner un nom plus descriptif, par ex. sort_order_class –

+1

Pour clarifier, l'aplatissement des tableaux peut être séparé par des espaces ou des traits de soulignement. Espaces quand c'est un type 'class' et souligne quand c'est un type' id' qui est aplati. – Fendo

1
[@item.type, @item == @sortcol && [:sort, @sortdir]] 
=> 
# if @item.type is blank, so class is still empty 
# if @item.type is "numeric" class is "numeric" 
class = @item.type 

# if @item equal @sortcol 
# class will append "sort" and @sortdir if it is not empty. 
if @item == @sortcol 
    class += "sort" 
    class += @sortdir 
end 

Cette construction @item == @sortcol && [:sort, @sortdir] renverra [: trier, @sortdir] que si @item == @sortcol est vrai

+0

Ok, je comprends. La sortie de '[: sort, @sortdir]' est interprétée dans haml en tant que 'class' donc elle ajoutera': sort' (en littéral), suivi d'un espace, puis '@ sortdir' (en tant que variable). C'est ainsi que nous nous retrouvons avec 'sort ascending' ou' sort descending'. Merci de m'avoir aidé à comprendre cela. – Fendo

Questions connexes