名为'classGroup'的变量是在呈现过程中从服务器文件传递的变量,它在使用ejs语法的ejs文件中的html代码中使用得很好(<%= %>),并且它也在同一个ejs文件中的脚本标签中使用。
另外,由于该变量在服务器端使用paginate()进行了分页,因此数据数组包含在文档中。
如果您使用ejs语法(<%= %>)将这个classGroup变量写入脚本标记中,则无法识别其中的'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>
您没有在任何ejs标记中定义i
,因此ejs对i
一无所知。简而言之,您不能在ejs标签内使用i
渲染数据。你能做的是在for循环之前将呈现的数据赋值给javascript变量,并实现for循环而不使用任何ejs标签
<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)});
希望我帮到你了。