我在桌子上有一个handlebars conditional statement,在里面我有一个视图。
如果我remove the conditional,则显示视图模板。如果我remove the view template,则显示直接html。但是如果both are there,视图模板永远不会显示,并且控制台中没有显示错误:
<script type="text/x-handlebars" data-template-name="application">
<table>
<tr>
<td>
<button {{action 'click_me'}}>Click me</button>
</td>
</tr>
{{#if controller.new_visible}}
{{#view App.MyView}}
<tr>
<td>
Hello!
</td>
</tr>
{{/view}}
{{/if}}
</table>
</script>
我做错了什么?
答案 0 :(得分:2)
除此之外,似乎(来自http://emberjs.com/guides/understanding-ember/the-view-layer/,第4节)Ember为Handlebars逻辑块助手(如{{#if}}
,{{#unless}}
等)创建虚拟视图。不是常规视图层次结构的一部分,因此它们不能很好地与常规嵌套子视图一起使用。
我怀疑这个问题的答案是在这一行的某个地方找到的:
“当路径传递给{{#if}}
或{{#with}}
更改时,Ember会自动重新呈现虚拟视图,这将替换其内容,重要的是,会销毁所有子视图以释放内存“。 (来自上面链接的部分)。
我最好的猜测是{{#if}}
块在insert上重新渲染,这会破坏其中的'child'{{#view}}
块。
答案 1 :(得分:1)
在视图中移动您的条件。请参阅此jsFiddle
{{#view App.MyView}}
{{#if controller.new_visible}}
<tr>
<td>
Hello!
</td>
</tr>
{{/if}}
{{/view}}