我将一个对象数组传递给一个EJS模板,我想使用数组的常规.map()方法将其映射到链接。但由于我无法弄清楚的原因,我传递给map()的回调在EJS中不能像我期望的那样工作,而且我得到的结果是空的。EJS是否处理array.map(callback)?
我的数据是一个对象数组,每个对象都有一个“section”和一个“name”键。
siteHeaders = [ { section: "home", name: "Home"},
{ section: "about", name: "About Me"},
... plus few more ]
模板看起来是这样的,我把它叫做(惊讶)template
一个局部变量:此数组作为“项”为模板通过
<% entries = entries.map(function(elem) { -%>
<% return -%>
<a href="/<%= elem.section %>">
<%= elem.name %>
</a>
<% }) -%>
<p><%- entries.join(" | ") %></p>
这样做的结果模板,当我打电话require('ejs').render(template, {entries: siteHeaders})
是:
<p> | | | | </p>
我不明白的是为什么这并不在EJS模板,当相应的地图调用工作就好R中工作EPL:
> siteHeaders.map(function(e){ return '<a href="/' + e.section +'">' + e.name + '</a>' })
[ '<a href="/home">Home</a>',
'<a href="/guide">About Me</a>',
'<a href="/quickstart">Portfolio</a>',
'<a href="/reference">Blog</a>',
'<a href="/downloads">Contact</a>' ]
>
任何线索?
我只是好奇,为什么你要使用地图,而不是entries.forEach()并直接输出你的html。 – chovy
没有特别的理由,除了表达通过join()方法在每个条目之间放置管道符号的想法之外,似乎更加清晰。请参阅下面的Vadim Baryshev的回答。 –