2009-04-16 80 views
2

在我構建的每個Web應用程序中,遇到此問題。我想有條件地在HTML元素上設置類。例如,有時<div>一個職位的樣子:最佳實踐:在Web應用程序中設置HTML類

<div class="post">...</div> 

,有時看起來像這樣:

<div class="post even recent replied_to author_is_admin">...</div> 

post後,每個班有沒有因爲一些邏輯決定了它應該的。最好的辦法是什麼?在Rails + HAML,我一直在內疚做的東西一樣的:

-classes = [] 
-classes << cycle('even', 'odd') 
-classes << 'recent' if post.recent? 
-classes << 'replied_to' if post.replied_to? 
-classes << 'author_is_admin' if post.author_is_admin? 
.post{:class => classes.join(' ')} 
    ... 

它不漂亮,我已經縮短它使用一個輔助,所以我可以這樣做:

.post{:class => "#{cycle('even', 'odd')} #{post_classes}"} 

它看起來應該更容易閱讀,因爲這是我們一直在做的事情。你有沒有使這個過程簡短易讀的方法?

回答

1

我認爲你所做的很好。我只會提出一些小改進。一種方法是將循環調用放入post_classes中。爲了便於閱讀,我會讓post_classes接受Post參數。這就形成了一個小的冗餘,但你可以很容易地定義這個helper方法避免:

def classes(object) 
    case object 
    when Post then post_classes(object) 
    end 
end 

這樣的話,你的模板代碼看起來就像這樣:

.post{:class => classes(Post)} 
相關問題