Условно установить идентификатор элемента HTML с HAML - PullRequest
18 голосов
/ 01 октября 2010

Я пытаюсь написать этот 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 выделяет все или неправильную запись.Мысли о том, как заставить хамла сотрудничать?

Ответы [ 3 ]

33 голосов
/ 01 октября 2010

Эх, сэр, ваше состояние не так: -)

должно быть

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

Есть вещь, которая не очень хороша - у вас останется id="" для остальных предметов. Но есть простое лекарство от этого:

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

Когда вы возвращаете nil значение для атрибута, HAML игнорирует его и не будет отображаться в выходных данных.

5 голосов
/ 24 сентября 2013

Это также работает в качестве альтернативы для первого решения в принятом ответе

= f.input_field :hello, disabled: (true unless SOME_CONDITION_HERE)
0 голосов
/ 07 декабря 2016

Принимая ответ @ vladCovaliov в контексте вопроса:

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