避免邏輯視圖中的
與標準方法的問題是,它需要在邏輯中的視圖if
陳述或者ternaries形式。如果您有多個條件CSS類與默認類混合在一起,那麼您需要將該邏輯放入字符串插值或ERB標記中。
這裏有一個更新的辦法,避免把任何邏輯入觀點:
<div class="<%= class_string(ok: @success) %>">
some message here
</div>
class_string
方法
的class_string
助手負責的哈希與由CSS類名字符串和鍵/值對布爾值。該方法的結果是一個布爾值計算爲true的類的字符串。
用法示例
class_names(foo: true, bar: false, baz: some_truthy_variable)
# => "foo baz"
其他用例
這個助手可以在ERB
標籤或使用Rails助手如link_to
使用。
<div class="<%= class_string(ok: @success) %>">
some message here
</div>
<% div_for @person, class: class_string(ok: @success) do %>
<% end %>
<% link_to "Hello", root_path, class: class_string(ok: @success) do %>
<% end %>
或/或類
對於使用的情況下的三元將是必要的(例如@success ? 'good' : 'bad'
),傳遞一個陣列,其中所述第一元件是用於true
類,另一個是用於false
<div class="<%= [:good, :bad] => @success %>">
靈感來自陣營
該技術是通過一個附加稱爲啓發(前身爲classSet
)來自Facebook的React
前端框架。
使用在你的Rails項目
截至目前,該class_names
功能並不在Rails的存在,但this article告訴您如何添加或落實到項目中。
+1標籤幫手似乎是一個乾淨的方法 – Anurag 2010-04-13 05:09:28
@meager,我不知道'div_for'。非常酷:) – 2010-04-13 05:15:28
@Anurag,請查看http://api.rubyonrails.org/classes/ActionController/RecordIdentifier.html#M000482。漂亮的東西。 – 2010-04-13 05:22:04