新手问题 slim 进退两难的多重缩进问题,某种特殊情况

FarFar · 2012年12月06日 · 最后由 FarFar 回复于 2012年12月06日 · 2263 次阅读

原来的 erb


<% if x == 0 %>
  <tr id="x">
<% else %>
  <tr id="y">
<% end %>
    <td id="cell"></td>
  </tr>

slim 如果改成如下,逻辑不对,当 x==0 时,tr#x 下面就不会有 td#cell

- if x == 0
  tr#x
- else
  tr#y
    td#cell

或者改成如下,td#cell 在 tr#x和 tr#y下面都没有,而是在一个新的 tr 下面

- if x == 0
  tr#x
- else
  tr#y
td#cell

现在的问题就是td#cell进退两难。要么把 td#cell 重复加入 if 和 else 中,虽然正确,但如果 td#cell 是很多行 td 的话,这样做显然会使代码冗长。

- if x == 0
  tr#x
    td#cell
- else
  tr#y
    td#cell
tr id=(x == 0 ? 'x' : 'y')
  td#cell

#1 楼 @fresh_fish 这样是可以,但是如果 if-else 结构稍微复杂一点,比如

<% if x == 0 %>
  <tr class="x">
    <td class="xx"></td>
<% else %>
  <tr id="y">
    <td id="y1"></td>
    <td id="y2"></td>
<% end %>
    <td id="cell"></td>
  </tr>

#2 楼 @FarFar 像这种复杂的条件嵌套 html,在 erb 里面也是不推荐的,一般都是要先重构 html 结构,再来写 erb 或者 slim

#3 楼 @quakewang 恩,实际中是不太会写到这么复杂,我只是突然想到这种情况。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号