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属性表现不同的false和true):
input class=('foo' if condition)
Run Code Online (Sandbox Code Playgroud)
这将输出
<input class="foo" />
Run Code Online (Sandbox Code Playgroud)
如果condition是true,和
<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)
| 归档时间: |
|
| 查看次数: |
5254 次 |
| 最近记录: |