2010-10-01 9 views
17

Tôi đang cố gắng viết html này trong haml để thêm thẻ id nếu mục đó là thẻ hiện tại. Đây là thiết lập để làm nổi bật jquery.Điều kiện đặt id phần tử HTML với 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> 

Bởi vì tôi không muốn viết một phương pháp helper, tôi đã bị mắc kẹt câu lệnh if bên trong thẻ:

%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 

Tuy nhiên, đây tag id của 'CURRENT_ITEM' dính với tất cả các các mục và không chỉ là mục hiện tại. Điều này dẫn đến javascript làm nổi bật tất cả hoặc nhập sai. Suy nghĩ về làm thế nào để có được haml hợp tác?

Trả lời

32

Ehm thưa ông, tình trạng của bạn là sai :-)

Nó phải là

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

Có một điều mà không đẹp - bạn kết thúc với id="" cho phần còn lại của các mặt hàng. Nhưng có một cách chữa đơn giản cho nó:

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

Khi bạn quay lại nil giá trị cho một thuộc tính HAML sẽ bỏ qua nó và nó sẽ không xuất hiện trong đầu ra.

+0

Cảm ơn! Ước gì tôi có thể làm cho nó sạch hơn – ScotterC

+0

Đó là "" khiến tôi cảm thấy xấu! :-) –

+0

khả năng sử dụng nil để "bỏ qua" một thuộc tính trong HAML là một mẹo tuyệt vời - cảm ơn bạn đã chỉ ra điều đó! – jpwynn

5

này cũng hoạt động như một sự thay thế cho các giải pháp đầu tiên trong câu trả lời chấp nhận

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

Điều này đặc biệt hữu ích cho các thuộc tính boolean (như bị vô hiệu hóa). –

0

Lấy @ câu trả lời vladCovaliov trong bối cảnh của câu hỏi:

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