我有一個模板中的情況,我想在每個塊內使用父上下文中的值時使用if塊。在Ember.js中,啓用ENV.VIEW_PRESERVES_CONTEXT時視圖的上下文是什麼?
從Ember.js視圖層引導(http://emberjs.com/guides/view_layer/):在灰燼
把手助手還可以指定變量。例如,{{#with controller.person as tom}}表單指定了後代作用域可以訪問的tom變量。即使子上下文有tom屬性,tom變量也會取代它。
此表單有一個主要優點:它允許您縮短長路徑而不會失去對父範圍的訪問權限。
這對於{{#each}}助手來說非常重要,它提供了一個{{#每個人都有的人}}形式。在這種形式下,後代上下文可以訪問person變量,但保持在與模板調用每個變量的範圍相同的範圍內。
我還啓用了標誌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/
我敢肯定,因爲當我關閉,我可以把它參照bar
爲parentView.bar
工作,這關係到ENV.VIEW_PRESERVES_CONTEXT
。
工作演示,其中ENV.VIEW_PRESERVES_CONTEXT
被禁用:http://jsfiddle.net/hekevintran/sMeyC/11/
感謝您的幫助。對我說謊的記錄員沒有幫助。我爲此提交了一份錯誤報告。我認爲具有命名模板的視圖可以直接引用它們的屬性而不用'view.'? – hekevintran
正確。使用{{view}}會改變上下文,但{{#view}}不會。 – Ryan
感謝您提出這個問題 - 我提出了一個修正{{log}}的pull請求 - https://github.com/emberjs/ember.js/pull/863 –