我觉得这很草率,正是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>
答案 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 }");