2009-04-16 67 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)} 
相关问题