如何有条件地使用HAML设置HTML元素ID?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

我试图在haml中编写这个html,以便在项目是当前项目的情况下添加一个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

然而,这个'current_item'的id标签会包含所有的项目,而不仅仅是当前的项目。这会导致javascript突出显示所有或错误的条目。关于如何获得合作的想法?

提问于
用户回答回答于

它应该是

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

有一件事情不太好 - 你最终会id=""得到其余的项目。但是有一个简单的治疗方法:

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

当你返回nil一个属性值时,HAML将忽略它,它不会出现在输出中。

用户回答回答于

这也可以作为接受答案中的第一个解决方案的替代方案

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

扫码关注云+社区