Javascript 即使条件变为false,if语句中的内容仍保留在DOM中-handlebar/Ember

Javascript 即使条件变为false,if语句中的内容仍保留在DOM中-handlebar/Ember,javascript,ember.js,handlebars.js,Javascript,Ember.js,Handlebars.js,以下代码似乎应该显示和隐藏内容_1和内容_2,因为布尔条件_1和条件_2在true或false之间切换: {{#if condition_1}} <!-- content_1 --> {{/if}} <!-- always-displayed content --> {{#if condition_2}} <!-- content_2 --> {{/if}} 编辑2:我意识到发生的事情比我上面描述的要微妙一些。content_1和content_2确

以下代码似乎应该显示和隐藏内容_1和内容_2,因为布尔条件_1和条件_2在true或false之间切换:

{{#if condition_1}}
  <!-- content_1 -->
{{/if}}
<!-- always-displayed content -->
{{#if condition_2}}
  <!-- content_2 -->
{{/if}}
编辑2:我意识到发生的事情比我上面描述的要微妙一些。content_1和content_2确实意外地保留在DOM中,但不一定在每次迭代中都保留,也不一定总是在人们可能期望的地方。例如,它直到两到三次迭代才开始,而且往往会发生大量的
内容_1
累积,并且有一半的时间(即对于其中一个布尔值)它们出现在始终显示的内容和
内容_2
之间,而不是像您预期的那样出现在顶部

此外,检查DOM时发现了不匹配的开始/结束对变质标记——也许这是完全正常的,但我认为这可能是一个线索(注54和56):



编辑3:似乎没有从DOM中删除的标记被放置在任何变态标记之外,我认为这是余烬操作所必需的。

你做得对,你有一个html错误(缺少结束标记、不匹配的标记等)


如果您需要动态更新DOM,您必须在响应更改的事件处理程序中显式地进行更新。这是错误的,Barmar,Ember会为您做的。我找不到任何东西,但我只是注释掉了所有HTML,并将其替换为非常简单的一行程序,我不再看到上述行为,所以我认为你可能是对的。更仔细地查找HTML错误。事实上,即使是我找不到任何错误的简单HTML(例如
  • /
  • )。我认为这可能是更复杂的事情——请参见编辑2。是的,这肯定不是因为糟糕的HTML。我已经看到了很多次错误,总是糟糕的HTML,也就是说一切都有第一次。错误的html可能不在if语句中。我在上面添加了一个没有问题的示例。
    
    condition_2: (->
      !@get('condition_1')
    ).property('condition_1')
    
    <script id="metamorph-53-start" type="text/x-placeholder"></script>
    <script id="metamorph-54-start" type="text/x-placeholder"></script>
    <script id="metamorph-54-start" type="text/x-placeholder"></script>
    <script id="metamorph-54-end" type="text/x-placeholder"></script>
    <script id="metamorph-53-end" type="text/x-placeholder"></script>
    <script id="metamorph-55-start" type="text/x-placeholder"></script>
    <script id="metamorph-56-start" type="text/x-placeholder"></script>
    <script id="metamorph-56-start" type="text/x-placeholder"></script>
    <script id="metamorph-56-end" type="text/x-placeholder"></script>
    <script id="metamorph-55-end" type="text/x-placeholder"></script>