【问题标题】:How can I use this variable in script tag inside ejs file如何在 ejs 文件中的脚本标记中使用此变量
【发布时间】:2021-10-27 03:37:32
【问题描述】:

名为'classGroup'的变量是从服务端文件渲染时传入的变量,在ejs文件中使用ejs语法()的html代码中很好用,也用过在同一个 ejs 文件中的 script 标签中。

此外,由于此变量是在服务器端使用 paginate() 进行分页的,因此数据数组包含在文档中。

如果使用 ejs 语法()将这个 classGroup 变量写在 script 标签内,其中的 'i' 将无法识别。

即使在 内,我如何才能让 'i' 工作?

<script>
    let len = <%=classGroup.totalDocs%>;
     for(let i = 0 ;i < len;i++) { 
           let chunk = <%= classGroup.docs[i].weight %>; // If I put a number in place of 'i', it works, but 'i' doesn't work.
           console.log('weight : ' + chunk);
     }
</script>

【问题讨论】:

    标签: javascript pagination ejs server-side-rendering


    【解决方案1】:

    你还没有在任何 ejs 标签中定义 i,所以 ejs 对 i 一无所知。简而言之,您不能在 ejs 标签内使用带有i 的渲染数据。您可以做的是在for循环之前将渲染数据分配给javascript变量,并在没有任何ejs标签的情况下实现for循环

    <script>
        let classGroup = <%- classGroup -%>; // use <%- instead of <%=
        let len = classGroup.totalDocs
        for (let i = 0; i < len; i++) {
            let chunk = classGroup.docs[i].weight;
            console.log('weight : ' + chunk);
        }    
    </script>
    

    为了将 classGroup 分配给 javascript 变量,您需要将其呈现为 JSON 字符串。所以在你的控制器内部你必须使用这个

    res.render("ejs-file", {classGroup: JSON.stringify(classGroup)});

    希望我能帮到你。

    【讨论】:

    • 或者 for 循环可以写在 ejs 标签内并输出 console.log('weight : &lt;%= chunk %&gt;');(这将产生不必要的大 html 输出对于大数组
    • @dimitris tseggenes 谢谢!你的回答很有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    相关资源
    最近更新 更多