2010-04-21 3 views
2

레일과 Haml으로 캘린더를 렌더링하려고합니다.다른 들여 쓰기가있는 Haml-if-else

사용 된 날짜는 @dates이라는 변수에 있습니다. 달력에 표시 할 첫 번째 날짜와 마지막 날짜가 포함 된 범위는 Date입니다. 첫날은 항상 일요일이고 마지막 날은 항상 월요일입니다.

HTML 테이블을 사용하여 평일에 한 열 (일요일이주의 첫 번째 날이 될 예정) 인 일반 달력을 렌더링하려고합니다.

따라서 %tr 다음에 일요일에 %td을 입력해야하지만 나머지 일은 %td이 필요합니다.

Haml에서 모델링하는 데 문제가 있습니다. 이것은 들여 쓰기의 다른 수준을 요구하는 것, 그리고 그것은 그것이 싫어하는 것입니다. 실패한 시도는 다음과 같습니다.

%table 
    %tr 
    %th= t('date.day_names')[0] # Sunday 
    %th= t('date.day_names')[1] 
    %th= t('date.day_names')[2] 
    %th= t('date.day_names')[3] 
    %th= t('date.day_names')[4] 
    %th= t('date.day_names')[5] 
    %th= t('date.day_names')[6] # Monday 
    [email protected] do |date| 
    - if(date.wday == 0) # if date is sunday 
     %tr 
     %td=date.to_s 
    - else 
     %td=date.to_s 

이것은 내가 원하는대로 작동하지 않습니다. 비 일요일 일에 대한 %td S는 %tr의 외부 표시 :

 <tr> 
     <td>2010-04-24</td> 
     </tr> 
     <td>2010-04-25</td> 
     <td>2010-04-26</td> 
     <td>2010-04-27</td> 
     <td>2010-04-28</td> 
     <td>2010-04-29</td> 
     <td>2010-04-30</td> 
     <tr> 
     <td>2010-05-01</td> 
     </tr> 
     <td>2010-05-02</td> 
     <td>2010-05-03</td> 
     ... 

내가 else에 두 가지 이상의 공백을 추가하는 시도하지만 HAML 부적절한 들여 쓰기에 대해 불평했다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

참고 : 정렬되지 않은 목록을 사용하여 캘린더를 렌더링하는 데 관심이 없습니다. 문제의 제약 조건 중 하나로서 표를 사용하는 것을 고려하십시오.

답변

4

에게 예브게니의 의견을 제공해야합니다.

여기에 레일 ' in_groups_of (링크 지금 죽었)를 사용하여 작동하는 솔루션입니다 :

%table(cellspacing="0" cellpadding="0") 
    %tr 
    %th= t('date.day_names')[0] 
    %th= t('date.day_names')[1] 
    %th= t('date.day_names')[2] 
    %th= t('date.day_names')[3] 
    %th= t('date.day_names')[4] 
    %th= t('date.day_names')[5] 
    %th= t('date.day_names')[6] 

    - @dates.to_a.in_groups_of(7) do |week| 
    %tr 
     - week.each do |day| 
     %td=day.to_s 

공지 사항 내가 배열로 범위를 변환했다 - 범위는 in_groups_of을 구현하지 못하는 것 같습니다.

1
%table 
    %tr 
    %th= t('date.day_names')[0] # Sunday 
    %th= t('date.day_names')[1] 
    %th= t('date.day_names')[2] 
    %th= t('date.day_names')[3] 
    %th= t('date.day_names')[4] 
    %th= t('date.day_names')[5] 
    %th= t('date.day_names')[6] # Monday 
    %tr 
    [email protected] do |date| 
     %td=date.to_s 

이 바른 길에 나를 넣어 당신

<tr> 
    <td>2010-04-24</td> 
    <td>2010-04-25</td> 
    <td>2010-04-26</td> 
    <td>2010-04-27</td> 
    <td>2010-04-28</td> 
    <td>2010-04-29</td> 
    <td>2010-04-30</td> 
</tr> 
+0

나는 첫 번째 행 (첫 번째 주)에서만 작동한다고 생각합니다. @dates에는 몇 주가 포함되어 있습니다. 나는 1 주일에 1 % tr을 넣고 싶다. – kikito

+1

정상적인 방법으로 haml에서 실행할 수 없습니다. 두 가지 옵션이 있습니다. 먼저 배열을 배열로 자르고 내 답변에 표시된대로 각각을 반복합니다 (필자가 선호하는 솔루션). 둘째, 실제로 수동으로 태그를 인쇄하십시오 : = ""(필요할 경우) (추악한 해결책입니다). 첫 번째 접근법의 예제가 필요하다면 그것을 스케치 할 수 있습니다. –

+1

in_groups_of를 사용하여 답변을 추가하는 방법을 찾았습니다. 도움을 주셔서 감사합니다.이 들여 쓰기 도구로 인해 정말로 차단되었습니다. – kikito

관련 문제