我正在尝试使用Rails和Haml呈现日历。
使用的日期来自名为@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
-@dates.each do |date|
- if(date.wday == 0) # if date is sunday
%tr
%td=date.to_s
- else
%td=date.to_s
这不符合我的要求。非星期日的%td
次出现在%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抱怨不正确的缩进。
最好的方法是什么?
注意:我对使用无序列表呈现日历不感兴趣。请考虑使用表作为问题的约束之一。
答案 0 :(得分:4)
Evgeny的评论让我走上正轨。
这是一个有效的解决方案,使用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
请注意,我必须将Range转换为数组 - 范围似乎没有实现in_groups_of
。
答案 1 :(得分: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
-@dates.each 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>