3

長年のリスナー、初めての発信者。私はここシカゴにあるCodeAcademyの生後6か月の開発者であり、この問題に数時間悩まされています。何卒よろしくお願い申し上げます。

ERBテンプレートをHAMLに変換しています。ERBは次のとおりです。

<ul class="nav nav-list">
  <li class="nav-header">
    <%= navigation_header %>
  </li>
  <% @navigation_links.each do |link| %>
  <% if link[:name].present? %>
    <li <%= link[:name] == @topic ? "class='active'" : "" %>>
      <%= link_to link[:name], link[:url] %>
    </li>
  <% else %>
    <hr />
  <% end %>
  <% end %>
</ul>

私が問題を抱えているERBラインは次のとおりです。

<li <%= link[:name] == @topic ? "class='active'" : "" %>>

私は多くのバリエーションをテストし、HAMLリファレンスをできるだけ多く読んで、このセクションに集中しました。

#{}補間を使用して、HTMLスタイルの属性に複雑な式を挿入することもできます。

%span(class="widget_#{@widget.number}")

...そしてGoogleとStackOverflowを検索しましたが、正しく出力を取得できません。HAMLはインラインCSSを無視し続けます。結局のところ、私はこのバージョンにとても自信を持っていましたが、うまくいきませんでした:

- @navigation_links.each do |link|
  - if link[:name].present?
    %li{ :class => "#{ link[:name] == @topic ? "active" : ""}" }
      = link_to link[:name], link[:url]
  - else
    %hr

私も:erbフィルターを試しましたが、役に立ちませんでした:

%ul.nav.nav-list
  %li.nav-header
    = navigation_header
- @navigation_links.each do |link|
  - if link[:name].present?
    :erb
      <li <%= link[:name] == @topic ? "class='active'" : "" %>>
    = link_to link[:name], link[:url]
  - else
    %hr

また、:cssフィルターも試しましたが、失敗しました。

何が間違っている可能性があるのか​​?これはStackOverflowに関する私の最初の質問です。そのため、役立つ情報を省略したり、ルールに違反したりした場合は、お知らせください。

4

1 に答える 1

7
<li <%= link[:name] == @topic ? "class='active'" : "" %>>

変数の補間は必要ありません。これは、次のいずれかのように、かなり簡単にHAMLに変換されます。

%li{:class => (link[:name] == @topic) && "active"}
%li{:class => (link[:name] == @topic) ? "active" : "" }

値を含めたり省略したりする場合は、最初の方が適しています。HAMLドキュメントから:

単一の値が指定され、それがfalseと評価された場合、それは無視されます。それ以外の場合は、文字列に変換されます。例えば:

.item{:class => @item.is_empty? && "empty"}
于 2012-04-05T22:27:35.463 に答える