2 Stimmen

Bewährte Praxis: HTML-Klassen in einer Webanwendung festlegen

Bei jeder Webapp, die ich erstelle, stoße ich auf dieses Problem. Ich möchte Klassen für HTML-Elemente bedingt festlegen. Zum Beispiel, manchmal ist die <div> für eine Stelle aussieht:

<div class="post">...</div>

Und manchmal sieht es so aus:

<div class="post even recent replied_to author_is_admin">...</div>

Jede Klasse nach post ist da, weil irgendeine Logik beschlossen hat, dass es so sein sollte. Was ist der beste Weg dazu? In Rails+HAML, habe ich schuldig gewesen, Sachen wie zu tun:

-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(' ')}
    ...

Es ist nicht schön, und ich habe es gekürzt, um einen Helfer zu verwenden, damit ich dies tun kann:

.post{:class => "#{cycle('even', 'odd')} #{post_classes}"}

Trotzdem sollte es einfacher zu lesen sein, weil wir es ständig tun. Gibt es Methoden, mit denen Sie diesen Prozess kurz und lesbar gestalten?

1voto

allyourcode Punkte 20754

Ich finde, was Sie getan haben, ist gut. Ich würde nur ein paar kleine Verbesserungen vorschlagen. Eine davon wäre, den Aufruf des Zyklus in post_classes unterzubringen. Der Lesbarkeit halber würde ich post_classes das Argument Post akzeptieren lassen. Das schafft ein wenig Redundanz, aber das kann man leicht vermeiden, indem man diese Hilfsmethode definiert:

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

Auf diese Weise wird Ihr Vorlagencode wie folgt aussehen:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X