2014-02-16 39 views
3

我有一個數組和一個將數組作爲參數的mixin。 我該如何將數組分成四個部分並傳遞給mixin?在玉石模板中分塊數組

因此,一些有點像這一點,但更好的工作:

each index, i in myArray 
    if i%4 == 0 
     +carouselItem([myArray[i], myArray[i+1], myArray[i+2], myArray[i+3]]) 

回答

1

我建議有點不同的方法:你的陣列轉換成二維數組在請求處理函數,然後再執行迭代過兩在您的Jade模板中使用二維數組(數組數組)。

隨着這種方法的模板將是更簡單,所有的轉換會發生處理程序方法(控制器)在這裏可以訪問不同的庫等

實施例內: 爲了數組轉換成兩維數組,你可以使用下面的方法:

function arrayTo2DArray (list, howMany) { 
    var result = []; input = list.slice(0); 
    while(a[0]) { 
     result.push(a.splice(0, howMany)); 
    } 
    return result; 
} 

而且你的請求處理程序可以看看如下:

exports.handler = function(req, res) { 

    // myArray with some values 

    res.render('template' { 
     myArray: arrayTo2DArray(myArray, 4) 
    } 
} 

如果您myArray是,比方說,['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']arrayTo2DArray(myArray, 4)將返回

[ 
    ['a', 'b', 'c', 'd'], 
    ['e', 'f', 'g', 'h'] 
] 

你的玉範本看起來像這樣(簡單得多)

each values in myArray 
    +carouselItem(values) 

我希望這將有助於。

+0

歡呼湯姆,我考慮過預處理數據,但它意味着另一層 - 檢索數據,檢查模板,然後根據瀏覽器大小進行分塊。我希望能夠將這種複雜性推向模板,因爲它是唯一需要預處理的模板。妥協是可能的嗎?即寫js在模板內分塊。我知道你可以用簡單的js編寫 - 但是你能寫出更復雜的多行代碼嗎?或者你可以執行一段外部代碼? –

+0

好的,只是閱讀:https://github.com/visionmedia/jade/issues/796(允許多行JS var定義),它有一個很大的沒有形式的維護者(TJ),所以我猜我想要什麼這樣做會被認爲是不好的做法,因此預處理它。 –

+0

@neilmanuell,全部取決於你的喜好和方法。我使用這種模式,因爲它適用於我,在許多情況下,它在維護和更改期間爲我節省了大量時間。正如你可能會在提及(和其他評論)中看到的那樣 - TJ Holowaychuk想要分解責任,即渲染模板和用於獲取和準備數據的控制器(也稱爲請求處理程序)。我相信你可能會發現不同的方法 - 但最終的目標是儘快提供軟件到一個特定的質量 - 在我看來,預處理是一條可行的路。 – Tom