【问题标题】:Remove HTML tag attribute in slim when attribute should not be displayed当属性不应该显示时,删除 slim 中的 HTML 标记属性
【发布时间】:2013-03-14 14:56:00
【问题描述】:

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

在 ERB 中,我可以使用:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    input class=('foo' if condition)
    

    这将输出

    <input class="foo" />
    

    如果condition 是true,并且

    <input />
    

    如果condition 为假。

    【讨论】:

      【解决方案2】:

      您可以使用 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">   
      

      【讨论】:

        猜你喜欢
        • 2011-07-27
        • 2011-11-20
        • 2023-04-02
        • 1970-01-01
        • 2012-03-16
        • 2017-02-07
        • 1970-01-01
        • 2016-07-29
        • 2011-10-23
        相关资源
        最近更新 更多