【问题标题】:Breaking out of an inner loop underscore打破内循环下划线
【发布时间】:2014-03-30 08:58:54
【问题描述】:

希望能得到一点帮助。

我想要实现的是根据条件打破内部循环,以便我可以继续到外部循环。

下划线可以吗?

类似的东西。

<% _.each(ApplicationTemplateFields, function(applicationTemplateField){%>
<% _.each(Validations, function(validation){%>
<% if(applicationTemplateField.UniqueKey == validation.UniqueKey) {%>
<div class="form-group has-error">
    <label><%= applicationTemplateField.FieldName %></label>
    <label class="control-label" for="inputError1"><%= validation.ValidationMessage %></label>
    <input type="text" class="form-control inputs" id="inputError1">
</div>
<% break; %>
<%} else {%>
<div class="form-group">
    <label><%= applicationTemplateField.FieldName %></label>
    <input type="text" class="form-control inputs" id="input<%= applicationTemplateField.Id %>">
</div>
<% break; %>
<% } %>
<% }) %>
<% }) %>

【问题讨论】:

标签: javascript underscore.js break underscore.js-templating


【解决方案1】:

each 的下划线文档指定:

It's also good to note that an each loop cannot be broken out of — to break, use _.find instead.

find一返回true就会爆发,所以代码会变成:

<% _.each(ApplicationTemplateFields, function(applicationTemplateField){%>
<% _.find(Validations, function(validation){%>
<% if(applicationTemplateField.UniqueKey == validation.UniqueKey) {%>
<div class="form-group has-error">
    <label><%= applicationTemplateField.FieldName %></label>
    <label class="control-label" for="inputError1"><%= validation.ValidationMessage %></label>
    <input type="text" class="form-control inputs" id="inputError1">
</div>
<% return true; %>
<%} else {%>
<div class="form-group">
    <label><%= applicationTemplateField.FieldName %></label>
    <input type="text" class="form-control inputs" id="input<%= applicationTemplateField.Id %>">
</div>
<% return true; %>
<% } %>
<% }) %>
<% }) %>

我注意到内部循环中的所有代码都在if else 语句中,无论哪种方式你都想中断。这意味着您的循环将始终在第一次迭代时中断,这使得它在很大程度上是多余的,因为只有集合中的第一项会被迭代。如果这是故意的,您可以完全避免内部循环并简化模板逻辑:

<% _.each(ApplicationTemplateFields, function(applicationTemplateField){%>
<% var validation = Validations[ 0 ]; %>
<% if(applicationTemplateField.UniqueKey == validation.UniqueKey) {%>
<div class="form-group has-error">
    <label><%= applicationTemplateField.FieldName %></label>
    <label class="control-label" for="inputError1"><%= validation.ValidationMessage %></label>
    <input type="text" class="form-control inputs" id="inputError1">
</div>
<%} else {%>
<div class="form-group">
    <label><%= applicationTemplateField.FieldName %></label>
    <input type="text" class="form-control inputs" id="input<%= applicationTemplateField.Id %>">
</div>
<% } %>
<% }) %>

【讨论】:

  • _.find 是否也打破了外部 _.each 循环?
猜你喜欢
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 2018-10-07
  • 1970-01-01
  • 2015-12-05
  • 2021-03-11
  • 2018-02-28
相关资源
最近更新 更多