这很难解释,所以这里有一支笔,所有的例子都可以看到。
哪个更便于访问?
选项1
<table>
<thead>
<tr>
<th>Thing 1</th>
<th>Thing 2</th>
<th colspan=2>Thing 3</th>
<th>Thing 4</th>
<th colspan=2>Thing 5</th>
<th>Thing 6</th>
<th>Thing 7</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan=2>40</td>
<td rowspan=2>30</td>
<th>Right</th>
<th>Left</th>
<td rowspan=2>50</td>
<th>Right</th>
<th>Left</th>
<td rowspan=2>25</td>
<td rowspan=2>30</td>
</tr>
<tr>
<td>10</td>
<td>20</td>
<td>15</td>
<td>40</td>
</tr>
</tbody>
</table>
选项 2
<table>
<thead>
<tr>
<th>Thing 1</th>
<th>Thing 2</th>
<th colspan=2>Thing 3</th>
<th>Thing 4</th>
<th colspan=2>Thing 5</th>
<th>Thing 6</th>
<th>Thing 7</th>
</tr>
<tr>
<th colspan=2></th>
<th>Right</th>
<th>Left</th>
<th></th>
<th>Right</th>
<th>Left</th>
<th colspan=2></th>
</tr>
</thead>
<tbody>
<tr>
<td>40</td>
<td>30</td>
<td>10</td>
<td>20</td>
<td>50</td>
<td>15</td>
<td>40</td>
<td>25</td>
<td>30</td>
</tr>
</tbody>
</table>
如果子值(右和左)相等,它应该显示如下:
<table>
<thead>
<tr>
<th>Thing 1</th>
<th>Thing 2</th>
<th>Thing 3s</th>
<th>Thing 4</th>
<th>Thing 5s</th>
<th>Thing 6</th>
<th>Thing 7</th>
</tr>
</thead>
<tbody>
<tr>
<td>40</td>
<td>30</td>
<td>10</td>
<td>50</td>
<td>15</td>
<td>25</td>
<td>30</td>
</tr>
</tbody>
</table>
或这个:
<table>
<thead>
<tr>
<th>Thing 1</th>
<th>Thing 2</th>
<th colspan=2>Thing 3</th>
<th>Thing 4</th>
<th>Thing 5s</th>
<th>Thing 6</th>
<th>Thing 7</th>
</tr>
<tr>
<th colspan=2></th>
<th>Right</th>
<th>Left</th>
<th colspan=5></th>
</tr>
</thead>
<tbody>
<tr>
<td>40</td>
<td>30</td>
<td>10</td>
<td>20</td>
<td>50</td>
<td>15</td>
<td>25</td>
<td>30</td>
</tr>
</tbody>
</table>
或这个:
<table>
<thead>
<tr>
<th>Thing 1</th>
<th>Thing 2</th>
<th>Thing 3s</th>
<th>Thing 4</th>
<th colspan=2>Thing 5</th>
<th>Thing 6</th>
<th>Thing 7</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan=2>40</td>
<td rowspan=2>30</td>
<td rowspan=2>10</td>
<td rowspan=2>50</td>
<th>Right</th>
<th>Left</th>
<td rowspan=2>25</td>
<td rowspan=2>30</td>
</tr>
<tr>
<td>15</td>
<td>40</td>
</tr>
</tbody>
</table>
等等。
如何有效地进行模板化?
由于表是由标记中的水平行定义的,因此需要在所有tr
s 中散布更改列的逻辑:
伪代码ERB
thing3()
如果thing5()
返回 truething3right != thing3left
%桌子 %thead %tr 第 % 件事 1 %th 东西 2 - 如果事物 3() %th 东西 3 - 别的 %th{:colspan => "2"} 东西 3s %th 东西 4 - 如果事物 5() %th 东西 5 - 别的 %th{:colspan => "2"} 东西 5s %th 东西 6 %th 东西 7 - 如果 !thing3() 或 !thing5() %tr.subcategory - 如果 !thing3() && !thing5() %th{:colspan => "2"} %th 对 左 %th %th %th 对 左 %th %th{:colspan => "2"} - elsif thing3() && !thing5() %th{:colspan => "4"} %th 对 左 %th %th{:colspan => "2"} - elsif !thing3() && thing5() %th{:colspan => "2"} %th 对 左 %th %th{:colspan => "4"} %t 正文 %tr %td=@whatever.thing1 %td=@whatever.thing2 %td= @whatever.thing3right - 如果 !thing3() %td= @whatever.thing3left %td=@whatever.thing4 %td= @whatever.thing5right - 如果 !thing5() %td= @whatever.thing5left %td= @whatever.thing6 %td=@whatever.thing7
这可行,但很难使用和更新。每列都有子类别,它变得指数级地复杂。
如何以可访问的方式显示这些数据,并且可以以可扩展且易于更新的方式进行模板化?