각 블록 내부에서 부모 컨텍스트의 값에 if 블록을 사용하려는 상황이 템플릿에 있습니다. 엠버의Ember.js에서 ENV.VIEW_PRESERVES_CONTEXT를 사용하는 경우보기의 컨텍스트가 무엇입니까?
핸들 바 헬퍼는 변수를 지정할 수 있습니다 다음 Ember.js보기 계층 가이드 (http://emberjs.com/guides/view_layer/)에서
. 예를 들어 {{#with controller.person as tom}} 형식은 하위 범위가 액세스 할 수있는 tom 변수를 지정합니다. 자식 컨텍스트에 tom 속성이 있어도 tom 변수는이를 대신합니다.
이 양식에는 하나의 주요 이점이 있습니다.이 옵션을 사용하면 부모 범위에 대한 액세스 권한을 잃지 않고도 긴 경로를 줄일 수 있습니다.
{{#each} 사람}} 양식을 제공하는 {{#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
"undefined"가 인쇄됩니다. foo
가 정의되지 않은 이유는 무엇입니까? 루트보기의 컨텍스트는 무엇입니까?
데모 : http://jsfiddle.net/hekevintran/sMeyC/10/
나는 내가 그것을 parentView.bar
으로 bar
를 참조하여 작업 할 수있는 사용하지 않는 경우 때문에이 ENV.VIEW_PRESERVES_CONTEXT
관련이 있음을 확신합니다.
근무 ENV.VIEW_PRESERVES_CONTEXT
이 비활성화되어 데모 : 엠버의 지금 http://jsfiddle.net/hekevintran/sMeyC/11/
도움 주셔서 감사합니다. 나에게 거짓말하는 로거는 도움이되지 못했다. 나는 그것에 대한 버그 보고서를 제출했다. 나는 템플릿이라는 이름의 뷰가 'view'없이 그들의 속성을 명백히 참조 할 수 있다고 가정한다. – hekevintran
이 맞습니다. {{view}}를 사용하면 컨텍스트가 변경되지만 {{#view}}는 변경되지 않습니다. – Ryan
이것을 가져 주셔서 감사합니다. {{log}} - https://github.com/emberjs/ember.js/pull/863을 수정하라는 요청을 함께 처리합니다. –