2017-04-17 14 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が示唆しているように、私は降伏ヘルパーを使ってこれを達成することができました。

// 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}} 
関連する問題