Melhores práticas: aulas de HTML configuração em um webapp
-
09-09-2019 - |
Pergunta
Em cada compilação webapp I, me deparo com esta questão. Quero aulas definido em elementos HTML condicionalmente. Por exemplo, às vezes o <div>
para um cargo parece com:
<div class="post">...</div>
E, às vezes, parece que isso:
<div class="post even recent replied_to author_is_admin">...</div>
Cada classe após post
está lá porque alguma lógica decidiu que deveria ser. Qual é a melhor maneira de isso? No Rails + HAML, eu fui culpado de fazer coisas como:
-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(' ')}
...
Não é bonito, e eu encurtado-lo para usar um ajudante para que eu possa fazer isso:
.post{:class => "#{cycle('even', 'odd')} #{post_classes}"}
Ainda parece que deve ser mais fácil de ler, porque é algo que fazemos o tempo todo. Será que você tem quaisquer métodos pelos quais você tornam este processo curto e legível?
Solução
Eu acho que o que você fez é bom. Gostaria apenas de sugerir algumas pequenas melhorias. Um seria para colocar a chamada de ciclo em post_classes. Para facilitar a leitura, eu faria post_classes aceitar o argumento Post. Isso cria um pouco de redundância, mas você pode facilmente evitá-lo, definindo este método auxiliar:
def classes(object)
case object
when Post then post_classes(object)
end
end
Assim, o código do modelo será parecido com este:
.post{:class => classes(Post)}