在ejs中访问传递的数组元素

Posted

技术标签:

【中文标题】在ejs中访问传递的数组元素【英文标题】:Access passed array element in ejs 【发布时间】:2020-03-06 02:22:50 【问题描述】:

我正在测试以下代码,它使用从我的 node.js 脚本传递到 .ejs 文件的数组。我似乎在循环中访问单个数组元素时遇到问题。除此之外,其他数组方法似乎可以正常工作,例如 .length 似乎返回了一个正确的值。该错误表示无法访问数组元素索引位置。错误消息是“_count is not defined”...我在这里做错了什么?

我的 node.js:

var test_up = [pix: "Post 1", name: "Nica", pix: "Post 2", name: "Danielle", pix: "Post 3", name: "Maricar", pix: "Post 4", name: "Peter", pix: "Post 5", name: "Sampson", pix: "Post 6", name: "Cleo"]; 
res.render('index_bootx', test_list: test_up); 

EJS 文件中的 javascript 以及导致问题的代码:

function initialize() 

var _count = 0;
var _limits = <%= test_list.length %>;  //THIS SEEMS FUNCTIONAL...
var _tally = 0;  

 if (<%= test_list.length %> > 20) _limits = 20;  //NO ERROR HERE...

  for (_count = 0; _count < _limits; _count++) 

  //**CREATE CONTENT HERE...

  var _item = document.createElement("div"); 
  _item.setAttribute("class", "lineups");
  _item.setAttribute("id", "member_" + _count);
  document.getElementById("row_" + _tally).appendChild(_item);

  var _name = document.createElement("h2");
  label = document.createTextNode(<% test_list[_count] %>);  //PROBLEM HERE! '_count is not defined'
  _name.appendChild(label);
  lineups.appendChild(_name);

 //**

   //for loop


在传递给 .ejs 文件的数组中选择元素的正确语法是什么...?提前谢谢你。

我已经修改了函数的末尾以包含一个“JSON.stringify”命令,如下所示:

var test = <%- JSON.stringify(test_list) %>;

document.getElementById("demo").innerhtml = test;

...但是“演示”的结果只是一堆“对象”...但是正确的数字:

[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

为什么我在应用 JSON.stringify 方法后在这里看到的是“对象”引用而不是实际的名称字符串?

【问题讨论】:

【参考方案1】:

尝试将&lt;% 标签放在for 循环周围,也像这样:

<% var _count; %>
<% for (_count = 0; _count < _limits; _count++)  %>
...
<%  %> // for loop

【讨论】:

谢谢,但我认为这不会解决问题。我的函数在脚本标签内运行……而不是在 DOM 本身内。我一直在进行各种尝试来解决这个问题,我认为我需要使用“JSON.stringify”方法......它似乎可以正常工作,但是结果数组只是用“对象”填充。 ..查看我编辑的帖子。谢谢。 好的。我认为变量声明也需要在 ejs 标签中才能看到定义的 _count。我猜不是。 是否可以在 DOM 主体中使用任何 Javascript,只要它包含在 标记中...???如果是这样,我也许可以在 DOM 中重写函数命令......可能......? 我终于明白了……!我对 JSON.stringify 命令的使用是正确的。之后,我可以使用“document.getElementById("demo").innerHTML = test[_count].name;”访问所需的“名称”字符串其中“_count”是数组中每个项目的索引元素。我希望各种教程和文档能够更清楚地将数组对象转换为字符串的需要。不过我很高兴这似乎现在解决了。

以上是关于在ejs中访问传递的数组元素的主要内容,如果未能解决你的问题,请参考以下文章

在 EJS 页面上从 mongoDB 访问数据

将数组从 EJS 传递到 Javascript

shell脚本中的数组常见使用方式

取消引用指针和访问数组元素之间的区别

如何从 Reactjs 中的 useEffect 挂钩访问道具

在 AJAX 调用(使用 ExpressJS)之后,在 EJS 模板中循环遍历数组的正确方法是啥?