Ruby on rails 请解释这段haml代码/文档
可以呈现为以下任意一种:Ruby on rails 请解释这段haml代码/文档,ruby-on-rails,ruby,haml,Ruby On Rails,Ruby,Haml,可以呈现为以下任意一种: %div{:class => [@item.type, @item == @sortcol && [:sort, @sortdir]] } Contents 内容 目录 目录 目录 我不太理解这个片段的@sortcol&&[:sort,@sortdir]部分 <div class="numeric sort ascending">Contents</div> <div class="numeric">Cont
%div{:class => [@item.type, @item == @sortcol && [:sort, @sortdir]] } Contents
内容
目录
目录
目录
我不太理解这个片段的@sortcol&&[:sort,@sortdir]
部分
<div class="numeric sort ascending">Contents</div>
<div class="numeric">Contents</div>
<div class="sort descending">Contents</div>
<div>Contents</div>
只有当
@item==@sortcol
为true时,此构造@item==@sortcol&&[:sort,@sortdir]
才会返回[:sort,@sortdir]。这取决于运算符优先级。因此,其评估如下:
@item==@sortcol
为true或false。
- 当
false时
返回&&
,因为未对另一部分进行评估false
- 因此,代码减少为
:class=>[@item.type]
true时
&&
返回表达式的第二部分。在本例中,数组[:sort,@sortdir]
:class=>[@item.type,:sort,@sortdir]
好的,我明白了。
[:sort,@sortdir]
的输出在haml中被解释为一个类
,因此它将附加:sort
(作为文本),后跟一个空格,然后是@sortdir
(作为变量)。这就是我们如何以升序排序
或降序排序
结束的。感谢您帮助我理解这一点。我想补充一点,在技术上使用代码时,阅读这一点非常困难。最好将其移动到助手处,并给它一个更具描述性的名称,例如sort_order_classe要澄清,数组的展平可以用空格或下划线分隔。如果是类
类型,则空格;如果是被展平的id
类型,则下划线。
[@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