如何在EJS中动态添加选项标签?

时间:2014-06-29 15:35:39

标签: 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 + '">' + 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>

3 个答案:

答案 0 :(得分:1)

如果您的目标是避免连接字符串,那么您可以关闭代码块,插入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>
%>

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

答案 1 :(得分:0)

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

<select id="developer" name="developer">
<option id="0"> Please choose a developer </option>
<% developers.map(item=> { %>
 <option id="<%= item._id%>"> <%= item.firstname %> </option>
<% }) %>
<select>

答案 2 :(得分:0)

  • 生成动态选项和文本字段*

    private MongoTemplate mongoTemplate;
    Document result = this.mongoTemplate.executeCommand("{ serverStatus: 1 }");