2009-04-16 4 views
2

私が構築したすべてのWebアプリケーションで、この問題が発生します。条件付きでHTML要素のクラスを設定したい。例えば、時々ポストのため<div>は、次のようになります。ベストプラクティス:WebアプリケーションでHTMLクラスを設定する

<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つはpost_classesにサイクルコールを入れることです。読みやすくするために、私はpost_classesにPost引数を受け入れるようにします。これは少し冗長性を作成しますが、あなたは簡単にこのヘルパーメソッド定義することで、それを避けることができます。

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

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

.post{:class => classes(Post)} 
関連する問題