我将一个对象数组传递给一个 EJS 模板,我想使用数组的常规 .map() 方法将其映射到链接中。但是由于我无法弄清楚的原因,我传递给 map() 的回调在 EJS 中无法按照我期望的方式工作,并且我得到了空结果。
我的数据是一个对象数组,每个对象都有一个“部分”和一个“名称”键。此数组作为“条目”传递给模板:
siteHeaders = [ { section: "home", name: "Home"},
{ section: "about", name: "About Me"},
... plus few more ]
Run Code Online (Sandbox Code Playgroud)
模板看起来像这样,我把它放在一个名为 (surprise) 的局部变量中template:
<% entries = entries.map(function(elem) { -%>
<% return -%>
<a href="/<%= elem.section %>">
<%= elem.name %>
</a>
<% } ) -%>
<p><%- entries.join(" | ") %></p>
Run Code Online (Sandbox Code Playgroud)
这个模板的结果,当我打电话时require('ejs').render(template, {entries: siteHeaders})是:
<p> | | | | </p>
Run Code Online (Sandbox Code Playgroud)
我不明白的是为什么这在 EJS 模板中不起作用,当相应的 map 调用在 REPL 中工作得很好时:
> siteHeaders.map(function(e){ …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用两种公共方法定义一个类.碰巧其中一种方法对于实现另一种方法很有用,但对于我的生活,我无法在另一种方法的范围内识别该功能.我不知道这是否是node.js特有的,但是如果重要的话,这是在node下运行的.
这是一个简短的玩具问题,它重现了我所看到的行为:
function Foo() {
this.list = [];
}
Foo.prototype = {
addSeveral: function(arr) { arr.forEach(function(v) { addOne(v)} ) },
addOne: function(item) { list.push(item); }
}
f = new Foo();
f.addSeveral([1,2,3]);
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它会爆炸:
[jasonb@localhost]$ node testobj.js
/home/jasonb/work/testobj.js:6
Foo.prototype.addSeveral = function(arr) { arr.forEach(function(v) { addOne(v)}
^
ReferenceError: addOne is not defined
at /home/jasonb/work/entity_mapping/testobj.js:6:70
Run Code Online (Sandbox Code Playgroud)
我已经尝试了我可以找到的关于如何将东西分配给类的原型的每个变体,具有相同的结果.如果我试着打电话this.addOne(v),它仍然会爆炸,但是TypeError: Object #<Object> has no method 'addOne'
我怎么能叫addOne()内addSeveral()?