2017-04-23 40 views
3

以下帕格腳本:else塊中的縮進是否從當前塊繼續?

- data = [ "A", "B", "C", "D" ] 
- for (i=0,i<data.length;i++) 
- var even = (i%2)==0 
    if even 
    .row 
     .col #{data[i]} 
    else 
     .col #{data[i]} 

生產:

<div class="row"> 
    <div class="col">A</div> 
</div> 
<div class="col">B</div> 
<div class="row"> 
    <div class="col">C</div> 
</div> 
<div class="col">D</div> 

我要的是:

<div class="row"> 
    <div class="col">A</div> 
    <div class="col">B</div> 
</div> 
<div class="row"> 
    <div class="col">C</div> 
    <div class="col">D</div> 
</div> 

爲什麼在else塊縮進不遵守?我如何實現我想要的輸出?

回答

1

帕格本質上不允許在else區塊內出現這種「額外」縮進。爲了達到您想要的結果,你能想到它像這個 -

- var data = [ "A", "B", "C", "D" ] 

each datum, index in data 
    if ((index % 2) == 0) 
    .row 
     .col #{datum} 
     if (data[index + 1]) 
     .col #{data[index + 1]} 

哪位yields-

<div class="row"> 
    <div class="col">A</div> 
    <div class="col">B</div> 
</div> 
<div class="row"> 
    <div class="col">C</div> 
    <div class="col">D</div> 
</div> 
1

雖然肖恩的答案是正確的它包含的重複代碼,因爲你必須指定你想要什麼與物品相關,每行兩次。對於每行需要兩個以上項目的情況,他的回答也不夠好。

而不是使用sean的[i + 1]結構我會建議使用第二個循環來找到所有必須落入此行的項目。這可以通過以下方式來完成:

- var itemsPerRow = 2; // This can be any positive number 
each unused, i in data 
    if (i % itemsPerRow == 0) 
    .row 
     each item, j in data 
     if (j - i >= 0 && j - i < itemsPerRow) 
      .col 
      .. What you want to do with -item- .. 

if (j - i >= 0 && j - i < itemsPerRow)確保只有實際落入該行的項目得到渲染。

這樣可以避免代碼重複,因爲您只需鍵入.. What you want to do with -item- ..一次。

結果看起來是這樣的

.row 
    .col 
    .col 
.row 
    .col 
    .col 
.row 
    .col 
    .col