3
我有一個數組和一個將數組作爲參數的mixin。 我該如何將數組分成四個部分並傳遞給mixin?在玉石模板中分塊數組
因此,一些有點像這一點,但更好的工作:
each index, i in myArray
if i%4 == 0
+carouselItem([myArray[i], myArray[i+1], myArray[i+2], myArray[i+3]])
我有一個數組和一個將數組作爲參數的mixin。 我該如何將數組分成四個部分並傳遞給mixin?在玉石模板中分塊數組
因此,一些有點像這一點,但更好的工作:
each index, i in myArray
if i%4 == 0
+carouselItem([myArray[i], myArray[i+1], myArray[i+2], myArray[i+3]])
我建議有點不同的方法:你的陣列轉換成二維數組在請求處理函數,然後再執行迭代過兩在您的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)
我希望這將有助於。
歡呼湯姆,我考慮過預處理數據,但它意味着另一層 - 檢索數據,檢查模板,然後根據瀏覽器大小進行分塊。我希望能夠將這種複雜性推向模板,因爲它是唯一需要預處理的模板。妥協是可能的嗎?即寫js在模板內分塊。我知道你可以用簡單的js編寫 - 但是你能寫出更復雜的多行代碼嗎?或者你可以執行一段外部代碼? –
好的,只是閱讀:https://github.com/visionmedia/jade/issues/796(允許多行JS var定義),它有一個很大的沒有形式的維護者(TJ),所以我猜我想要什麼這樣做會被認爲是不好的做法,因此預處理它。 –
@neilmanuell,全部取決於你的喜好和方法。我使用這種模式,因爲它適用於我,在許多情況下,它在維護和更改期間爲我節省了大量時間。正如你可能會在提及(和其他評論)中看到的那樣 - TJ Holowaychuk想要分解責任,即渲染模板和用於獲取和準備數據的控制器(也稱爲請求處理程序)。我相信你可能會發現不同的方法 - 但最終的目標是儘快提供軟件到一個特定的質量 - 在我看來,預處理是一條可行的路。 – Tom