18

Slimでクラスを表示しない場合は、class属性を削除したいのですが。

ERBでは、次を使用できます。

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

Slimでこれを行うにはどうすればよいですか?

私はこれを見つけましたが、もっと慣用的な解決策があるに違いないと思います。

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

2 に答える 2

41

属性の値が の場合、属性nil全体が省略されます (実際、これはnilまたはほとんどの場合に発生しますが、とでは属性の動作が異なるfalseように見えます)。classfalsetrue

input class=('foo' if condition)

これは出力されます

<input class="foo" />

conditionである場合true、および

<input />

condition偽の場合。

于 2013-03-14T15:25:35.083 に答える
5

スプラット (*) 演算子を使用して、追加する属性を含むハッシュを使用して、スリムでタグの条件付き属性を定義できます。

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 に答える