Подтвердить что ты не робот

Условно установленный идентификатор элемента 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 %>&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

Однако этот тег id 'current_item' содержит все элементы, а не только текущий. Это приводит к тому, что javascript выделяет все или неправильную запись. Мысли о том, как заставить haml сотрудничать?

4b9b3361

Ответ 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) }