Ruby瘦内联如果

问题描述 投票:1回答:3

我正在尝试使用Ruby Slim进行内联if

鉴于我的例子如下......

- if @droppable
  .panel data-draggable="true"
    span More content here
- else
  .panel
    span More content here

在这两种情况下,唯一的区别是顶级data-draggable元素上存在.panel属性。 .panel的内容是相同的,所以我想完成以下内容:

.panel (@droppable ? data-draggable="true")
  span More content here

有没有办法在Slim实现这一目标?

ruby condition inline slim-lang
3个回答
2
投票

这里不需要if,三元运算符需要三个操作数,而不是两个。

Slim和HAML都设计为省略具有nil / false值的属性,故意让你使用&&运算符将truthy / falsy值转换为具有特定值或缺席的属性的存在:

在苗条:

.panel data-draggable=(@droppable && "true")
  span Hello

怀孕:

.panel{data: {draggable: @droppable && "true"}}
  %span Hello

在这两种情况下,如果@droppable是真值,则会添加data-draggable="true",否则将省略该属性。


0
投票

使用dynamic tags

ruby:
  def panel!
    {tag: 'panel'}.tap do |tag|
      tag[:"data-draggable"] = true if @droppable
    end
  end

*panel!
  span hello

0
投票

你不能拥有“inline if”,但你可以通过slim in line html support做到这一点:

<div class="cool_class"       
  - if conditional_is_met
    | data="must_be_added"
    | special_data="#{@my_data.to_json}" 
  |          
</div>

考虑到在html标签内部仍然遵循细长的缩进。最后的|对于关闭if非常重要。

© www.soinside.com 2019 - 2024. All rights reserved.