2

私が構築するすべてのWebアプリで、この問題に遭遇します。HTML要素に条件付きでクラスを設定したい。たとえば<div>、投稿のforは次のようになります。

<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}"}

それは私たちがいつもやっていることなので、それでも読みやすいはずです。このプロセスを短くて読みやすくする方法はありますか?

4

1 に答える 1

1

あなたがやったことは大丈夫だと思います。私はいくつかのマイナーな改善を提案するだけです。1つは、サイクル呼び出しをpost_classesに配置することです。読みやすくするために、post_classesにPost引数を受け入れさせます。これにより少し冗長性が生まれますが、次のヘルパーメソッドを定義することで簡単に回避できます。

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

そうすると、テンプレートコードは次のようになります。

.post{:class => classes(Post)}
于 2009-04-16T22:21:56.173 に答える