请解释这段haml代码/文档

时间:2011-04-05 12:49:03

标签: ruby-on-rails ruby haml

%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 个答案:

答案 0 :(得分:3)

这依赖于运算符优先级。所以它的评估如下:

  1. @item == @sortcol是真还是假。
    • false
      1. &&返回false,因为其他部分未经过评估
      2. 因此代码缩减为:class => [@item.type]
    • true
      1. &&返回表达式的第二部分。在这种情况下,数组[:sort, @sortdir]
      2. HAML会在渲染之前自动展平数组,因此它等同于:class => [@item.type, :sort, @sortdir]

答案 1 :(得分: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

仅当@item == @sortcol && [:sort, @sortdir]为真时,此构造@item == @sortcol才会返回[:sort,@ sortdir]