我将一个对象数组传递给EJS模板,我希望使用数组的常规.map()方法将其映射到链接。但由于我无法弄清楚的原因,我传递给map()的回调在EJS中不能像我期望的那样工作,而且我的结果是空的。
我的数据是一个对象数组,每个对象都有一个“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>
我不知道的是,当相应的地图调用在REPL中工作正常时,为什么这在EJS模板中不起作用:
> 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>' ]
>
任何线索?
答案 0 :(得分:4)
此代码应该有效:
<% entries = entries.map(function(elem) {
return '<a href="/' + elem.section + '">' + elem.name + '</a>';
}) -%>
<p><%- entries.join(" | ") %></p>
你不能在函数内部使用简单的html。它只能在循环和条件下使用。
答案 1 :(得分:2)
它不像join('|')那样干净,但是如果你不想连接,你可以这样做:
<% entries.forEach(function(entry, i, entries){ %>
<a href="<%= entry.section %>"><%= entry.name %></a>
<%= i == entries.length-1 ? ' | ' : '' %>
<% } %>