当不应显示属性时,删除slim中的HTML标记属性

时间:2013-03-14 14:56:01

标签: ruby-on-rails ruby erb slim-lang

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

在再培训局,我可以使用:

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

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

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

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

2 个答案:

答案 0 :(得分:35)

如果属性的值为nil,则将省略整个属性(实际上,对于大多数情况,nilfalse会发生这种情况,但它看起来像{ {1}}属性对classfalse}的行为有所不同:

true

这将输出

input class=('foo' if condition)

如果<input class="foo" /> condition

true

如果<input /> 为假。

答案 1 :(得分:5)

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

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>   

对于像“class”这样的属性或打开了属性合并的其他属性,您也可以执行以下操作:

- 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">