最佳实践:在Web应用程序中设置HTML类

时间:2009-04-16 21:44:36

标签: html ruby-on-rails coding-style haml

在我构建的每个webapp中,我遇到了这个问题。我想有条件地在HTML元素上设置类。例如,有时帖子的<div>如下:

<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 个答案:

答案 0 :(得分:1)

我认为你所做的很好。我只建议一些小的改进。一种方法是将循环调用放在post_classes中。为了便于阅读,我将使post_classes接受Post参数。这会产生一些冗余,但您可以通过定义此辅助方法轻松避免它:

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

这样,您的模板代码将如下所示:

.post{:class => classes(Post)}