将数据传递给EJS包括

时间:2014-05-12 17:26:50

标签: node.js express ejs

我正在尝试在EJS中实现递归包含。我正在使用ExpressJS 4.我需要能够有选择地将数据传递给include。我的" sub"变量随循环迭代而变化,因此不能全局工作。 但是我得到了#34;超出最大呼叫堆栈大小"这意味着partial中的if语句总是评估为true。

这是我的主要HTML:

<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">

    <% subs.forEach(function(sub) { %>
    <li>
    <a href="#"><%= sub.fname +' ' +sub.lname %></a>
    <% if (sub.agents && sub.agents.length) {subs = sub.agents; %>
    <% include dropdown.html %>
    <% } %>
    </li>
    <% }); %>

</ul>

更新: 即使这样也行不通:

<ul class="f-dropdown">
    <% if (sub.agents && sub.agents.length > 0) { %>
        <% (function(subs) { %>
            <% include dropdown.html %>
        <% })(sub.agents); %>
    <% } %>
</ul>

我即将尝试JUST

1 个答案:

答案 0 :(得分:1)

从技术上讲,visionmedia ejs库不支持将参数传递给包含。但是它很好地处理普通的javascript,所以你可以尝试使用IIFE闭包来处理范围变化:

<a href="#"><%= sub.fname +' ' +sub.lname %></a>
<% if (sub.agents && sub.agents.length) { %>
    <% (function() { %>
        <% var subs = sub.agents; %>
        <% include dropdown.html %>
    <% })(); %>
<% } %>

如果这对您有用,请告诉我;我很高兴进一步调查,如果它没有。