2012-04-05 3 views
1

Lange Zeit Hörer, zum ersten Mal Anrufer. Ich bin ein 6 Monate alter Entwickler von Code Academy hier in Chicago, und ich habe dieses Problem für ein paar Stunden festgefahren. Zuvor schätze ich all Ihre Hilfe und Zeit.Wie interpoliere ich Ruby innerhalb des CSS-Attributs eines HAML% li-HTML-Tags erfolgreich?

Ich konvertiere eine ERB-Vorlage in HAML. Die ERB ist:

<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> 

Die ERB Linie ich Probleme, bin mit ist:

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

ich viele Variationen getestet haben, so viel von der HAML Referenz wie möglich zu lesen, auf this Abschnitt konzentriert :

Sie können auch verwenden # {} Interpolation komplizierte Ausdrücke in einem HTML-style-Attribut einzufügen:

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

... und durchsucht Google & StackOverflow, aber ich kann die Ausgabe nicht bekommen richtig; HAML ignoriert das Inline-CSS. Nachdem all mein Grund war ich in dieser Version so zuversichtlich, aber es hat nicht funktioniert:

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

Ich habe auch versucht ein: erb-Filter, ohne Erfolg:

%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 

Und ich habe auch einen: css-Filter versucht, aber das ist fehlgeschlagen.

Irgendwelche Ideen, was könnte falsch sein? Dies ist meine erste Frage zu StackOverflow. Wenn ich also einige hilfreiche Informationen ausgelassen oder Regeln gebrochen habe, lass es mich wissen.

Antwort

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

Sie benötigen keine variable Interpolation. Dies führt eher leicht in HAML als eine der folgenden:

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

Die erste in den Fällen bevorzugt, in denen Sie mit oder den Wert gänzlich verzichtet wird. Vom HAML docs:

Wenn ein einzelner Wert angegeben wird und es das Ergebnis falsch ist es ignoriert; Andernfalls wird es in eine Zeichenfolge konvertiert. Zum Beispiel:

.item{:class => @item.is_empty? && "empty"} 
+0

nicht sicher, wie die Vergabe Punkte usw. Der Grund meiner CSS wurde nicht die aktive Klasse Anzeige war in erster Linie, weil meine jede Schleife nicht eingekerbten genug war, von oben ihm zwei Klassen zu fangen. Hätte meine Interpolationsversion noch funktioniert oder war Ihre Syntax _erforderlich_? Ich möchte Ihnen Anerkennung dafür geben, dass Sie mich auf dem Operator && vorgeschlagen und erzogen haben! – RudyOnRails

+0

Ihre Syntax war in Ordnung, aber weniger als ideal. – meagar

Verwandte Themen