2009-04-16 2 views
2

빌드 한 모든 웹 응용 프로그램에서이 문제가 발생합니다. HTML 요소에 조건부로 클래스를 설정하고 싶습니다. 어떤 논리가 있어야합니다 결정하기 때문에 post 후 각 클래스가모범 사례 : 웹 응용 프로그램에서 HTML 클래스 설정

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

:

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

그리고 때때로 보이는이 같은 : 같은 예를 들어, 때로는 게시물에 대한 <div> 보인다. 이것에 가장 좋은 방법은 무엇입니까? 레일 + 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

나는 당신이 해낸 것이 좋다고 생각합니다. 나는 약간의 사소한 개선만을 제안 할 것이다. 하나는 post_classes에 순환 호출을 넣는 것입니다. 가독성을 위해 post_classes가 Post 인수를 허용하도록했습니다. 이것은 약간의 중복을 만들지 만, 당신은 쉽게 도우미 메서드 정의하여이를 방지 할 수 있습니다

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

그 방법을, 템플릿 코드는 다음과 같이 표시됩니다

.post{:class => classes(Post)} 
관련 문제