Лучшая практика: настройка классов HTML в веб-приложении - PullRequest
2 голосов
/ 17 апреля 2009

В каждом веб-приложении, которое я создаю, я сталкиваюсь с этой проблемой. Я хочу условно установить классы на элементы 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 Ответ

1 голос
/ 17 апреля 2009

Я думаю, что вы сделали хорошо. Я бы предложил только несколько небольших улучшений. Можно было бы поместить вызов цикла в post_classes. Для удобства чтения я бы заставил post_classes принимать аргумент Post. Это создает небольшую избыточность, но вы можете легко избежать этого, определив этот вспомогательный метод:

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

Таким образом, код вашего шаблона будет выглядеть так:

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