2010-10-01 68 views
17

我正在嘗試在haml中編寫此html以添加一個id標記,如果該項目是當前的。這是爲jquery高亮設置。有條件地設置HTML元素ID與HAML

<% if line_item == @current_item %> 
<tr class="line_item id="current_item"> 
<% else %> 
<tr class="line_item"> 
<% end %> 
    <td><%= line_item.quantity %>&times;</td> 
    <td><%= line_item.product.title %></td> 
    <td class="item_price"><%= number_to_currency(line_item.total_price) %></td> 
</tr> 

因爲我不想寫一個輔助方法,我堅持在標籤內的if語句:

%tr.line_item{ :id => (line_item == @current_item ? '' : 'current_item') } 
%td 
    = line_item.quantity 
%td 
    \x #{line_item.product.title} 
%td.item_price 
    = number_to_currency(line_item.total_price) 
%td.item_remove 
    = button_to 'Remove', line_item, :method => :delete 

然而,「current_item」這個ID標籤與所有的堅持物品而不僅僅是當前的物品。這會導致javascript突出顯示所有或錯誤的條目。關於如何獲得合作的想法?

回答

32

埃姆先生,你的情況是錯誤的:-)

應該

line_item == @current_item ? "current_item" : "" 

有是不漂亮的事情 - 你最終id=""爲項目的其餘部分。但是,是它的一個簡單的治療:

%tr.lineitem{ :id => (line_item == @current_item ? "current_item" : nil)} 

當你爲一個屬性返回nil值HAML會忽略它,它也不會出現在輸出中。

+0

謝謝!希望我能讓它更清潔 – ScotterC 2010-10-04 23:50:45

+0

這就是讓我感覺不好的「」! :-) – 2013-08-21 08:06:58

+0

在HAML中使用nil來「忽略」一個屬性的能力是一個很好的技巧 - 謝謝指出! – jpwynn 2014-01-09 22:40:02

5

這也可以作爲一種替代的第一個解決方案中公認的答案

= f.input_field :hello, disabled: (true unless SOME_CONDITION_HERE) 
+0

這對布爾屬性(如禁用)特別有用。 – 2014-02-10 16:39:12

0

以@ vladCovaliov的回答的問題的情況下:

%tr.line_item{ id: (@current_item unless @current_item != line_item) }