【问题标题】:chunking an array in jade template在翡翠模板中分块一个数组
【发布时间】:2014-02-16 09:21:51
【问题描述】:

我有一个数组和一个以数组为参数的 mixin。 我如何将数组分成四个部分并传递给 mixin?

所以有点像这样,但更好,更有效:

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

【问题讨论】:

    标签: templates pug


    【解决方案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']
    ]
    

    您的 Jade 模板可能看起来像这样(简单得多)

    each values in myArray
        +carouselItem(values)
    

    我希望这会有所帮助。

    【讨论】:

    • 干杯汤姆,我曾考虑预处理数据,但这意味着另一层 - 检索数据,检查模板,然后根据浏览器大小进行分块。我希望我可以将这种复杂性推入模板中,因为它是唯一需要预处理的模板。妥协可能吗?即在模板内编写用于分块的js。我知道您可以使用简单的 js 编写 - 但您可以编写更复杂的多行代码吗?或者你可以执行一段外部代码吗?
    • 好的,只需阅读以下内容:github.com/visionmedia/jade/issues/796(允许多行 JS var 定义)它对维护者 (TJ) 有很大的限制,所以我猜我想做的事情会被认为是不好的练习,然后进行预处理。
    • @neilmanuell,一切都取决于您的偏好和方法。我正在使用这种模式,因为它适用于我,并且在许多情况下,它在维护和更改期间为我节省了大量时间。正如您可能在提及(和其他 cmets)中看到的那样 - TJ Holowaychuk 想要拆分职责,即用于渲染的模板和用于获取和准备数据的控制器(又名请求处理程序)。我相信您可能会找到不同的方法 - 但最终目标是尽快交付具有特定质量的软件 - 在我看来,预处理是要走的路。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2016-03-09
    • 2013-08-05
    • 2016-12-25
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多