我將一個對象數組傳遞給一個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的回答。 –