我正在尝试使用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实现这一目标?
这里不需要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"
,否则将省略该属性。
使用dynamic tags:
ruby:
def panel!
{tag: 'panel'}.tap do |tag|
tag[:"data-draggable"] = true if @droppable
end
end
*panel!
span hello
你不能拥有“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非常重要。