【问题标题】:Please explain this snippet of haml code/documentation请解释这段haml代码/文档
【发布时间】:2011-04-05 12:49:03
【问题描述】:
%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>

我不太明白这个 sn-p 的 @sortcol &amp;&amp; [:sort, @sortdir] 部分。

【问题讨论】:

    标签: ruby-on-rails ruby haml


    【解决方案1】:

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

    1. @item == @sortcol 为真或假。
      • false
        1. &amp;&amp; 返回 false 因为另一部分未评估
        2. 因此代码减少到:class =&gt; [@item.type]
      • true
        1. &amp;&amp; 返回表达式的第二部分。在这种情况下,数组[:sort, @sortdir]
        2. HAML 在渲染之前自动展平数组,因此它相当于:class =&gt; [@item.type, :sort, @sortdir]

    【讨论】:

    • 我要补充一点,虽然代码在技术上可以工作,但阅读起来非常棘手。将其移至助手并给它一个更具描述性的名称可能会更好,例如sort_order_class
    • 为了澄清,数组的展平可以用空格或下划线分隔。 class 类型时为空格,id 类型时为下划线。
    【解决方案2】:
    [@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 为真时,此构造@item == @sortcol &amp;&amp; [:sort, @sortdir] 才会返回[:sort, @sortdir]

    【讨论】:

    • 好的,我明白了。 [:sort, @sortdir] 的输出在haml 中被解释为class,因此它将附加:sort(作为文字),后跟一个空格,然后是@sortdir(作为变量)。这就是我们最终得到sort ascendingsort descending 的方式。感谢您帮助我理解这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 2015-07-31
    • 1970-01-01
    相关资源
    最近更新 更多