Условно установленный идентификатор элемента HTML с помощью HAML
Я пытаюсь написать этот html в haml, чтобы добавить тег id, если элемент является текущим. Это нужно настроить для выделения jquery.
<% if line_item == @current_item %>
<tr class="line_item id="current_item">
<% else %>
<tr class="line_item">
<% end %>
<td><%= line_item.quantity %>×</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
Однако этот тег id 'current_item' содержит все элементы, а не только текущий. Это приводит к тому, что javascript выделяет все или неправильную запись. Мысли о том, как заставить haml сотрудничать?
Ответы
Ответ 1
Ehm sir, ваше состояние неверно: -)
Это должно быть
line_item == @current_item ? "current_item" : ""
Есть что-то не очень красивое - в итоге вы получаете id=""
для остальной части предметов. Но для этого есть простое лечение:
%tr.lineitem{ :id => (line_item == @current_item ? "current_item" : nil)}
Когда вы возвращаете значение nil
для атрибута, HAML будет игнорировать его, и он не будет отображаться на выходе.
Ответ 2
Это также работает как альтернатива для первого решения в принятом ответе
= f.input_field :hello, disabled: (true unless SOME_CONDITION_HERE)
Ответ 3
Взяв @vladCovaliov, ответьте в контексте вопроса:
%tr.line_item{ id: (@current_item unless @current_item != line_item) }