Пожалуйста, объясните этот фрагмент кода / документации haml - PullRequest
3 голосов
/ 05 апреля 2011
%div{:class => [@item.type, @item == @sortcol && [:sort, @sortdir]] } Contents

может отображаться как любой из:

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

Я действительно не понимаю @sortcol && [:sort, @sortdir] часть этого фрагмента.

Ответы [ 2 ]

3 голосов
/ 05 апреля 2011

Это зависит от приоритета оператора.Таким образом, оно оценивается следующим образом:

  1. @item == @sortcol является истинным или ложным.
    • когда false
      1. && возвращает false, поскольку другая часть не оценивается
      2. , следовательно, код уменьшается до :class => [@item.type]
    • , когда true
      1. && возвращает вторую часть выражения.В этом случае массив [:sort, @sortdir]
      2. HAML автоматически выравнивает массив перед рендерингом, что эквивалентно :class => [@item.type, :sort, @sortdir]
1 голос
/ 05 апреля 2011
[@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

Эта конструкция @item == @sortcol && [:sort, @sortdir] будет возвращать [: sort, @sortdir], только если @item == @sortcol имеет значение true

...