2017-04-17 9 views
0

Ember 응용 프로그램에 부모 구성 요소의 init() 메서드 내에서 생성하는 속성이 있습니다. 나는 이것을이 아이들에게 전 해주고 싶다.Ember Pass 속성이 하위 구성 요소에 부모 구성 요소 내부에 생성되었습니다.

// app/component/parent.js 
import Ember from 'ember'; 
import ParentProperty from 'somewhere'; 

export default Ember.Component.extend({ 
    init() { 
     this._super(...arguments); 
     let model = this.get('model'); 
     let moreData = this.get('moreData'); 
     this.parentProperty = new ParentProperty(model, moreData); 
    } 

    click(e) { 
     this.get('moreData').doSomthing(); 
    } 
}); 

// app/component/application.hbs 
{{#parent model=model moreData=moreData}} 
    // Here, I want to pass the `parentProperty` created 
    // in the init of the parent component. 
    {{child parentProperty=parent.parentProperty}} 
{{/parent}} 

는 내가하는 ParentProperty를 만들려면 부모와 자식 포장, 그들 모두에 그것을 아래로 전달하는 {{with}} 도우미를 사용할 수있어,하지만 그건 내가 원하는 게 아니에요. 이것이 가능한가?

+0

이 템플릿은 경로 템플릿이지만 부모 컴포넌트 템플릿이 아닙니다. 맞습니까? 그리고 외부에서 구성 요소의 속성에 액세스 할 수 없습니다. 그러나 그것을'yield '헬퍼에게 넘기면 노출 될 수 있습니다. – Lux

+0

오른쪽 경로 템플릿입니다. 나는 그 질문을 편집했다. 항복 헬퍼로부터 어떻게 노출시킬 수 있습니까? – CookieMonster

답변

1

@Lux가 제안했듯이, yield helper를 사용하여 이것을 달성 할 수있었습니다.

// app/component/parent.js 
import Ember from 'ember'; 
import ParentProperty from 'somewhere'; 

export default Ember.Component.extend({ 
    init() { 
     this._super(...arguments); 
     let model = this.get('model'); 
     let moreData = this.get('moreData'); 
     this.parentProperty = new ParentProperty(model, moreData); 
    } 

    click(e) { 
     this.get('moreData').doSomthing(); 
    } 
}); 

// app/component/parent.hbs 
{{yield parentProperty}} 

// app/component/application.hbs 
{{#parent model=model moreData=moreData as |parentProperty|}} 
    {{child parentProperty=parentProperty}} 
{{/parent}}