2014-05-12 110 views
0

我正試圖在EJS中實現一個遞歸包含。我正在使用ExpressJS 4.我需要能夠選擇性地將數據傳遞給包含。我的「sub」變量隨着循環迭代而改變,因此不能全局工作。 但是我得到「超出最大調用堆棧大小」,這意味着部分中的if語句總是評估爲true。將數據傳遞給EJS包括

這是我的主要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> 

這是我包括(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> 

UPDATE: 即使這不起作用:

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

即將試用JUST

+0

檢查了這個http://stackoverflow.com/questions/34622011/node-ejs-passing-data-to-an-include –

回答

1

從技術上講,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 %> 
    <% })(); %> 
<% } %> 

讓我知道這是否爲你的作品;如果沒有,我很樂意進一步調查。

+0

這是一個輝煌的答案!不幸的是,它不起作用。我仍然收到「超出最大調用堆棧大小」。最有可能的subs var是相同的,並且總是通過測試。 但我感到鼓舞,我們很接近。 –

+0

我試過了一切。它不會像預期的那樣改變每次迭代的'sub'var。 –