18

当类不应该在 Slim 中显示时,我想删除类属性。

在 ERB 中,我可以使用:

<input <%= "class='foo'" if false %> />
<input />

我如何在 Slim 中做到这一点?

我找到了这个,但我觉得必须有一个更惯用的解决方案:

| <input "#{'class=\"foo\"' if false}" />
4

2 回答 2

41

如果属性的值为nil,则整个属性将被省略(实际上,大多数情况下都会发生这种nil情况false,但看起来class属性的行为与false和不同true):

input class=('foo' if condition)

这将输出

<input class="foo" />

如果conditiontrue,并且

<input />

如果condition是假的。

于 2013-03-14T15:25:35.083 回答
5

您可以使用 splat (*) 运算符来帮助定义 slim 中标签的条件属性,使用包含要添加的属性的哈希。

http://www.rubydoc.info/gems/slim/frames#Splat_attributes__

splat 运算符将散列扩展为一组要添加到标签的属性。如果哈希为空,则不会添加任何属性。

例如,

- admin_classes = @User.admin? ? {class: "foo"} : {}
input *admin_classes

如果@User.admin?== true,它应该呈现

<input class="foo">

否则如果@User.admin?== false,它应该呈现

<input>   

对于“类”之类的属性或其他打开属性合并的属性,您还可以执行以下操作:

- admin_classes = @User.admin? ? {class: ["foo","bar"]} : {}
input *admin_classes class="biz"

如果@User.admin?== true,它应该呈现

<input class="foo bar biz">

否则如果@User.admin?== false,它应该呈现

<input class="biz">   
于 2015-04-21T18:40:59.857 回答