【问题标题】:Loop in Jade (currently known as "Pug") template engine在 Jade(目前称为“Pug”)模板引擎中循环
【发布时间】:2012-02-02 11:00:57
【问题描述】:

我想使用像for(int i=0; i<10; i++){} 这样的简单循环。

如何在 Jade 引擎中使用它?我正在使用 Node.js 并使用 expressjs 框架。

【问题讨论】:

    标签: javascript for-loop pug express


    【解决方案1】:

    Pug(从“Jade”重命名)是一个用于全栈 Web 应用程序开发的模板引擎。它为编写 HTML 提供了简洁的语法并保持严格的空格缩进(如 Python)。它已使用 JavaScript API 实现。该语言主要支持两种迭代结构:each 和 while。 'for' 可以用来代替'each'。请在此处查阅语言参考:

    https://pugjs.org/language/iteration.html

    这是我的一个 sn-ps: each/for iteration in pug_screenshot

    【讨论】:

      【解决方案2】:

      一种不寻常但很漂亮的方式

      无索引

      each _ in Array(5)
        = 'a'
      

      将打印:aaaaa

      带索引

      each _, i in Array(5)
        = i
      

      将打印:01234

      注意事项:在上面的例子中,我已经将jade的each迭代语法的val参数赋值给_,因为它是必需的,但总是会返回undefined

      【讨论】:

        【解决方案3】:

        这是一个非常简单的jade 文件,其中有一个循环。 Jade 对空白非常敏感。在循环定义行 (for) 之后,您应该给想要进入循环的内容缩进(制表符)。你可以在没有{} 的情况下做到这一点:

        - var arr=['one', 'two', 'three'];
        - var s = 'string';
        doctype html
        html
            head
            body
                section= s
                - for (var i=0; i<3; i++)
                    div= arr[i]
        

        【讨论】:

        • 您知道如何去除以这种方式生成的元素之间的空格吗?
        • @vsync 一个技巧是使用span 而不是div
        • 我的意思是一般。这样,元素之间总会有一个空格,因为玉语法的工作方式有一个new line 原因。
        【解决方案4】:

        只是添加另一种可能性,因为它可能会帮助尝试遍历数组并保持计数的人。例如,下面的代码会遍历一个名为 items 的数组,并且只显示前 3 项。注意eachif 是原生玉,不需要连字符。

        ul
          - var count = 0;
          each item in items
            if count < 3
              li= item.name
            - count++;
        

        【讨论】:

        • 非常感谢您:- count++;
        【解决方案5】:

        您还可以使用while 循环加快处理速度(请参阅此处:http://jsperf.com/javascript-while-vs-for-loops)。恕我直言,也更简洁易读:

        i = 10
        while(i--)
            //- iterate here
            div= i
        

        【讨论】:

        • 是的,但是您的 while 循环从 10 开始并向下运行。这会将项目以相反的顺序添加到 DOM。你可能不希望这样。
        • @PhillipBurch 也可以反转:var i = 0; while (i++ &lt; 10) console.log(i-1) //=&gt; 0123456789
        【解决方案6】:

        例如:

        - for (var i = 0; i < 10; ++i) {
          li= array[i]
        - }
        

        详细文档请见https://github.com/visionmedia/jade

        【讨论】:

        • 嗨乔,我这里有个问题:LINK,我通过alessioalex解决了,但现在我有新问题:如果我的数据库结构是这样的,那么一张专辑我可以存储很多歌曲,对吗?以及为什么在 app.js 中这样做:var Album = db.model('Album'); var album = new Album(); album.songs.push({_id:'4f046b3bf71f5ed522000002'});
          并且我收到错误无法调用未定义
          的方法“调用”我如何存储到正确的位置?
        • 这可能是因为SongSchema 没有在album.js 中定义。
        • 我有一个数组 x,console.log(x, x.length);告诉我这个: [{name:a,done:true},{name:c}] 0 是正常的吗?我错过了什么
        【解决方案7】:

        使用节点我收集了 @stuff 的东西并像这样访问它:

        - each stuff in stuffs
          p
            = stuff.sentence
        

        【讨论】:

        • 这是根据jade-lang.com/reference/iteration 执行此操作的规范方法。此外,您实际上也不需要第一行 each 前面的 -
        • Pug 错误,如果你有一个 - (破折号)在每个前面。
        • 你能解释一下@stuff吗?为什么开头有@
        猜你喜欢
        • 2021-01-13
        • 2011-06-26
        • 2012-09-04
        • 2020-11-16
        • 2013-07-22
        • 2017-12-21
        • 2018-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多