代码之家  ›  专栏  ›  技术社区  ›  nicholaides

最佳实践:在webapp中设置HTML类

  •  2
  • nicholaides  · 技术社区  · 15 年前

    在我构建的每个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 回复  |  直到 15 年前
        1
  •  1
  •   allyourcode    15 年前

    我觉得你做的很好。我只建议做一些小的改进。一种方法是将循环调用放在post-u类中。为了可读性,我会让post-u类接受post参数。这会造成一点冗余,但是通过定义这个助手方法,您可以很容易地避免它:

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

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

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