Ruby 苗条内联 if
Ruby slim inline if
我正在尝试使用 Ruby Slim 进行内联 if
。
给出我下面的例子...
- if @droppable
.panel data-draggable="true"
span More content here
- else
.panel
span More content here
在这两种情况下,唯一的区别是顶级 .panel
元素上存在 data-draggable
属性。 .panel
的内容相同,所以我想完成如下操作:
.panel (@droppable ? data-draggable="true")
span More content here
有没有办法在 Slim 中实现这一点?
使用dynamic tags:
ruby:
def panel!
{tag: 'panel'}.tap do |tag|
tag[:"data-draggable"] = true if @droppable
end
end
*panel!
span hello
这里不需要if
,三元运算符需要三个操作数,而不是两个。
Slim 和 HAML 都设计为省略具有 nil/false 值的属性,有意让您使用 &&
运算符将 truthy/falsy 值转换为 存在 具有特定值的属性,或不存在:
修身版:
.panel data-draggable=(@droppable && "true")
span Hello
在 HAML 中:
.panel{data: {draggable: @droppable && "true"}}
%span Hello
在这两种情况下,如果 @droppable
是真值,则添加 data-draggable="true"
,否则将省略该属性。
你不能有 "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 标签内仍然遵循 slim identation。
最后的 |
对于关闭 if.
很重要
我正在尝试使用 Ruby Slim 进行内联 if
。
给出我下面的例子...
- if @droppable
.panel data-draggable="true"
span More content here
- else
.panel
span More content here
在这两种情况下,唯一的区别是顶级 .panel
元素上存在 data-draggable
属性。 .panel
的内容相同,所以我想完成如下操作:
.panel (@droppable ? data-draggable="true")
span More content here
有没有办法在 Slim 中实现这一点?
使用dynamic tags:
ruby:
def panel!
{tag: 'panel'}.tap do |tag|
tag[:"data-draggable"] = true if @droppable
end
end
*panel!
span hello
这里不需要if
,三元运算符需要三个操作数,而不是两个。
Slim 和 HAML 都设计为省略具有 nil/false 值的属性,有意让您使用 &&
运算符将 truthy/falsy 值转换为 存在 具有特定值的属性,或不存在:
修身版:
.panel data-draggable=(@droppable && "true")
span Hello
在 HAML 中:
.panel{data: {draggable: @droppable && "true"}}
%span Hello
在这两种情况下,如果 @droppable
是真值,则添加 data-draggable="true"
,否则将省略该属性。
你不能有 "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 标签内仍然遵循 slim identation。
最后的 |
对于关闭 if.