2010-04-21 38 views
2

我想用Rails和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

葉夫根的評論讓我在正確的軌道上。

這裏有這樣的作品,使用Rails' 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包含數週,而不僅僅是一個。我想每週放一個%tr。 – kikito 2010-04-21 11:04:47

+1

你不能以正常的方式在haml中完成它。有兩種選擇。首先,將你的數組切成幾周,並按照我的答案(這將是我的首選解決方案)中所示的迭代每個數組。其次,實際上手動打印標籤:=「」當你需要它們時(這是一個醜陋的解決方案)。如果你需要第一種方法的例子,我可以勾畫它。 – 2010-04-21 11:13:34

+1

我發現了一種使用in_groups_of(添加答案)的方法。感謝您的幫助,我真的被這個縮進東西阻塞了。 – kikito 2010-04-21 11:30:40