2014-01-15 40 views
3

Hej。每個循環都帶有if條件的Jade模板

我想寫一個tr只是在開始和每9個元素之後。 爲此,我使用模運算符,如上例所示。
但是如果我想將td寫入同一個trelse條件,例如它會創建另一個tr

有人看到有什麼問題嗎?或者它如何工作?

代碼示例

extends layout.jade 

    block body 
     table 
     each result, i in results 
     if (i%9==0) 
      tr 
      td.ranking 
      div.rank 
       p=(i+1)+'.' 
       div.points 
        p=result.points 
       div.person        
        p.name=result.name 
        p=result.company 
     else 
      td.ranking 
      div.rank 
       p=(i+1)+'.' 
       div.points 
        p=result.points 
       div.person        
        p.name=result.name 
        p=result.company 

HTML輸出

Jade Html output

+0

我的理解是否正確:您希望將'results'的內容顯示爲每個'tr'有9個「td」? – Tom

+0

是的@Tom沒錯。 – Yves

+1

我發佈了其中一種可能的解決方案。當我有類似的問題需要解決時,我總是執行拆分爲二維數組。 Jade模板對於那些操作(至少對我來說)並不是很有幫助,所以我更喜歡處理handler中的參數轉換。 – Tom

回答

1

一種解決方案是爲如下:

假設你有一個變量results您快遞員:

var results = ['a','b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r']; 

請注意,這可能是一個對象數組。爲了簡單起見,我通過'r'使用了從a開始的字符串。

讓該數組分成行和列的二維數組:

var results2d = []; 
while(results[0]) { 
    results2d.push(results.splice(0, 9)); 
} 

我總是喜歡來執行,以減少模板內碼的附加行數快件處理內部,所有的轉換。

所以你results2d情況如下:

[ [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' ], 
    [ 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p' ], 
    [ 'q', 'r' ] ] 

然後你就可以通過它傳遞到翡翠的模板:

res.render('templateId', { results:results2d }); 

模板的代碼可能是如下內部:

table 
    - var i = 1; 
    each result in results 
     tr 
      each item in result 
       td.ranking 
        div.rank 
         p=(i++)+'.' 
         div.points 
          p=result.points 
         div.person        
          p.name=result.name 
          p=result.company 

而你的HTML輸出如下:

results

我希望這會有所幫助。

+0

看起來不錯。我會試一試。非常感謝@Tom – Yves

+0

是的。它工作很好。謝謝@湯姆 – Yves