Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 在jade模板中分块数组_Templates_Pug - Fatal编程技术网

Templates 在jade模板中分块数组

Templates 在jade模板中分块数组,templates,pug,Templates,Pug,我有一个数组和一个mixin,它将数组作为参数。 如何将数组分为四个部分并传递给mixin 类似这样的东西,但更好,更有效: each index, i in myArray if i%4 == 0 +carouselItem([myArray[i], myArray[i+1], myArray[i+2], myArray[i+3]]) 我建议使用一种稍微不同的方法:在请求处理函数中将数组转换为二维数组,然后在Jade模板中的二维数组(数组数组数组)上执行迭代 使

我有一个数组和一个mixin,它将数组作为参数。 如何将数组分为四个部分并传递给mixin

类似这样的东西,但更好,更有效:

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

我建议使用一种稍微不同的方法:在请求处理函数中将数组转换为二维数组,然后在Jade模板中的二维数组(数组数组数组)上执行迭代

使用这种方法,模板将更加简单,所有转换都将发生在处理程序方法(控制器)中,您可以在其中访问不同的库等

例如: 要将数组转换为二维数组,可以使用以下方法:

您的请求处理程序可以如下所示:

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

您的翡翠模板可以如下所示(更简单)


我希望这会有所帮助。

汤姆欢呼,我曾考虑过对数据进行预处理,但这将意味着另一层——检索数据、检查模板,然后根据浏览器大小进行分块。我希望我能将这种复杂性推进模板,因为它是唯一需要预处理的模板。有可能达成妥协吗?ie编写用于在模板内分块的js。我知道您可以使用编写简单的js,但是您可以编写更复杂的多行代码吗?或者你能执行一段外部代码吗?好的,只要读一下:(允许多行JS var定义),它有一个很大的不符合维护者(TJ)的形式,所以我猜我想做的会被认为是不好的做法,所以预处理就是。@neilmanuell,这一切都取决于你的偏好和方法。我使用这种模式是因为它对我有效,在许多情况下,它在维护和更改期间为我节省了大量时间。正如您可能在提及(和其他评论)中看到的那样,TJ Holowaychuk希望将职责分开,即用于呈现的模板和用于获取和准备数据的控制器(也称为请求处理程序)。我相信您可能会发现不同的方法-但最终目标是尽快交付达到特定质量的软件-在我看来,预处理是一种方法。
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) 
    }
}
[
    ['a', 'b', 'c', 'd'], 
    ['e', 'f', 'g', 'h']
]
each values in myArray
    +carouselItem(values)