我在模板中有一种情况,我想在每个块内对父上下文中的值使用 if 块。
来自 Ember.js 视图层指南 ( http://emberjs.com/guides/view_layer/ ):
Ember 中的车把助手也可以指定变量。例如,{{#with controller.person as tom}} 表单指定后代范围可以访问的 tom 变量。即使子上下文具有 tom 属性,tom 变量也会取代它。
这种形式有一个主要好处:它允许您缩短长路径而不会失去对父范围的访问。
这在 {{#each}} 助手中尤为重要,它提供了一个 {{#each person in people}} 表单。在这种形式中,后代上下文可以访问 person 变量,但仍与模板调用 each 的范围相同。
我还启用了标志ENV.CP_DEFAULT_CACHEABLE
和ENV.VIEW_PRESERVES_CONTEXT
.
编码:
App = Ember.Application.create({});
App.view = Ember.View.extend({
foo: [1, 2, 3],
bar: true
});
模板:
<script type="text/x-handlebars" >
{{#view App.view}}
{{log foo}} {{! this will log "undefined"}}
{{#each array in foo}}
{{#each number in array}}
{{#if bar}}
{{number}}
{{/if}}
{{/each}}
{{/each}}
{{/view}}
</script>
这不起作用。我不确定为什么。记录foo
将打印“未定义”。为什么是foo
未定义的?根视图的上下文是什么?
演示:http: //jsfiddle.net/hekevintran/sMeyC/10/
我很确定这与此有关,因为当我禁用它时,我可以通过引用asENV.VIEW_PRESERVES_CONTEXT
来使其工作。bar
parentView.bar
ENV.VIEW_PRESERVES_CONTEXT
禁用的工作演示:http: //jsfiddle.net/hekevintran/sMeyC/11/