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

Pii*_*ioo 16 ruby ruby-on-rails erb slim-lang

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

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

<input <%= "class='foo'" if false %> />
<input />
Run Code Online (Sandbox Code Playgroud)

我怎么在Slim中做到这一点?

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

| <input "#{'class=\"foo\"' if false}" />
Run Code Online (Sandbox Code Playgroud)

mat*_*att 38

如果一个属性的值nil,那么整个属性将被忽略(实际上这是对发生的nil或者false在大多数情况下,但它看起来像class属性表现不同的falsetrue):

input class=('foo' if condition)
Run Code Online (Sandbox Code Playgroud)

这将输出

<input class="foo" />
Run Code Online (Sandbox Code Playgroud)

如果conditiontrue,和

<input />
Run Code Online (Sandbox Code Playgroud)

如果condition是假的.


小智 5

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

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

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

例如,

- admin_classes = @User.admin? ? {class: "foo"} : {}
input *admin_classes
Run Code Online (Sandbox Code Playgroud)

if @ User.admin?== true,它应该渲染

<input class="foo">
Run Code Online (Sandbox Code Playgroud)

否则如果@ User.admin?== false,它应该渲染

<input>   
Run Code Online (Sandbox Code Playgroud)

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

- admin_classes = @User.admin? ? {class: ["foo","bar"]} : {}
input *admin_classes class="biz"
Run Code Online (Sandbox Code Playgroud)

if @ User.admin?== true,它应该渲染

<input class="foo bar biz">
Run Code Online (Sandbox Code Playgroud)

否则如果@ User.admin?== false,它应该渲染

<input class="biz">   
Run Code Online (Sandbox Code Playgroud)