Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在EJS中动态添加选项标记?_Node.js_Express_Ejs - Fatal编程技术网

Node.js 如何在EJS中动态添加选项标记?

Node.js 如何在EJS中动态添加选项标记?,node.js,express,ejs,Node.js,Express,Ejs,我觉得这是草率的,正是EJS试图阻止的。有没有一种方法可以在不连接循环字符串的情况下添加值和选项 <!-- developer field option values --> <% var optionstring = ""; for (var i = 0; i < developers.length; i++){ optionstring += '<option value="' + developers[i]._id + '"

我觉得这是草率的,正是EJS试图阻止的。有没有一种方法可以在不连接循环字符串的情况下添加值和选项

    <!-- developer field option values -->
    <% var optionstring = "";
    for (var i = 0; i < developers.length; i++){
      optionstring += '<option value="' + developers[i]._id + '">' + developers[i].firstname
    }

    %>



    <% for (var i = 0; i < users.length; i++){ %>
      <tr>
        <td><%= users[i].firstname %></td> 
        <td><select class="assign_dev"><option value="unassigned">unassigned<%- optionstring %></select></td>
        <td><select class="ticket_status"><option value="open">Open</option><option value="closed">Closed</option></select></td>
      </tr>

未分配
开闭式

如果您的目标是避免串接字符串,则可以关闭代码块,插入html,然后重新打开代码块

<% for (var i = 0; i < users.length; i++){ %>
    <tr>
        <td><%= users[i].firstname %></td> 
        <td>
            <select class="assign_dev">
                <option value="unassigned">unassigned</option>
                <%
                    for (var j = 0; j < developers.length; j++){
                        %><option value="<%= developers[j]._id %>"><%= developers[j].firstname %><%
                    }
                %>
            </select>
        </td>
        <td>
            <select class="ticket_status">
                <option value="open">Open</option>
                <option value="closed">Closed</option>
            </select>
        </td>
    </tr>
%>

未分配
打开
关闭
%>

然而,我不认为真正的目标应该是避免连接。目标应该是使代码清晰高效(只要效率不牺牲清晰性)。在我看来,您的原始代码更好。由于您需要反复列出相同的选项,因此在前面的循环中创建一次列表,然后在第二个循环中重用缓存的字符串比嵌套循环更高效、更清晰。

您可以在选择中填充选项,而不使用循环。 我使用Array.prototype.map函数处理每个项目(参见下面的示例)


请选择一个开发者
{ %>
  • 生成动态选项和文本字段*

        <% for(var i = 0; i < filterData.length; i++) { %>
             <select name="hour" >
            <% for(var j = 0; j < filterData.length; j++) { %>
            <option value='<%= filterData[j] %>'><%= filterData[j] %></option>
             <% } %>
          <input type="text" id="sssss">
              </select>
       <% } %>
    
    
    

我还想添加一个默认的开发人员值,我将从数据库中提取该值。我认为您列出的方式将是我唯一可以这样做的方式。感谢您的回答。刚刚尝试了代码。它在底部缺少一个右括号。但是,当我添加右括号时,循环不会迭代。当我删除嵌套的循环,外部循环迭代。@MichaelSpatafore,我没有意识到我有与循环变量相同的
var I
。当循环分开时这很好,但是当它们嵌套时,内部循环重写了外部循环的迭代器变量。我修复了上面的代码,将
j
用于内部循环。
    <% for(var i = 0; i < filterData.length; i++) { %>
         <select name="hour" >
        <% for(var j = 0; j < filterData.length; j++) { %>
        <option value='<%= filterData[j] %>'><%= filterData[j] %></option>
         <% } %>
      <input type="text" id="sssss">
          </select>
   <% } %>