Node.js 将数据传递到EJS包括
我正在尝试在EJS中实现递归包含。我正在使用ExpressJS4。我需要能够有选择地将数据传递到include。我的“子”变量随着循环迭代而变化,因此无法全局工作。 然而,我得到了“超过了最大调用堆栈大小”,这意味着部分中的if语句总是计算为true 这是我的主要HTML:Node.js 将数据传递到EJS包括,node.js,express,ejs,Node.js,Express,Ejs,我正在尝试在EJS中实现递归包含。我正在使用ExpressJS4。我需要能够有选择地将数据传递到include。我的“子”变量随着循环迭代而变化,因此无法全局工作。 然而,我得到了“超过了最大调用堆栈大小”,这意味着部分中的if语句总是计算为true 这是我的主要HTML: <ul id="drop1" data-dropdown-content class="f-dropdown"> <% agents.forEach (function(sub) { var subs =
<ul id="drop1" data-dropdown-content class="f-dropdown">
<% agents.forEach (function(sub) { var subs = sub.agents; %>
<li>
<a href="#"><%= sub.fname +' ' +sub.lname %></a>
<% if (subs) { %>
<% include dropdown.html %>
<% } %>
</li>
<% }); %>
</ul>
-
这是我的include(dropdown.html):
-
更新:
即使这样也不行:
<ul class="f-dropdown">
<% if (sub.agents && sub.agents.length > 0) { %>
<% (function(subs) { %>
<% include dropdown.html %>
<% })(sub.agents); %>
<% } %>
</ul>
0) { %>
我将尝试从技术上讲,visionmedia ejs库不支持将参数传递到includes中。但是,它可以很好地处理普通javascript,因此您可以尝试使用IIFE闭包来处理范围更改:
<a href="#"><%= sub.fname +' ' +sub.lname %></a>
<% if (sub.agents && sub.agents.length) { %>
<% (function() { %>
<% var subs = sub.agents; %>
<% include dropdown.html %>
<% })(); %>
<% } %>
让我知道这是否对您有效;如果不起作用,我很乐意进一步调查。这是一个很好的答案!不幸的是,它不起作用。我仍然得到“超过最大调用堆栈大小”。最有可能的是子变量是相同的,并且总是通过测试。但我感到鼓舞的是,我们已经很接近了。我已经尝试了一切。它只是没有像预期的那样更改每次迭代的“子”变量。请检查此项
<a href="#"><%= sub.fname +' ' +sub.lname %></a>
<% if (sub.agents && sub.agents.length) { %>
<% (function() { %>
<% var subs = sub.agents; %>
<% include dropdown.html %>
<% })(); %>
<% } %>