2017-07-12 11 views
0

Emberコンポーネントをラップするとき、そのプロパティを省略するときに内部コンポーネントのデフォルトに戻ってプロパティを渡す方法を教えてください。例えばEmberコンポーネントをラッピングするときにプロパティを渡す

super-inputで包まれますbasic-input取る:

コンポーネント/基本input.js

export default Component.extend({ 
    placeholder: "foo" 
}); 

テンプレート/コンポーネント/基本input.hbs

{{ input placeholder=placeholder }} 

componエント/超input.js

export default Component.extend({}); 

テンプレート/コンポーネント/超input.hbs

<label> 
    <span>{{label}}</span> 
    {{ basic-input placeholder=placeholder }} 
</label> 

渡すplaceholdersuper-inputに作品

{{super-input label="baz" placeholder="bar"}} 

が、どのように我々は許可しませんプロパティがomiの場合に使用されるbasic-inputのデフォルト値はfooです何か?

{{super-input label="baz"}} 
+0

ここにはいろいろあります:http://jsfiddle.net/e8w0brgb/ –

+0

'basic-input'コンポーネントは必要な機能を実装する必要があります(つまり、プレースホルダが定義されていない場合はデフォルト値を使用します)。そのためには、alptugdが提案するものや '{{入力プレースホルダ=(プレースホルダプレースホルダ 'foo')}}'を使用できます。 – kumkanillam

答えて

0

これは、計算されたプロパティが有効になる場所です。内部コンポーネント内で計算されたプロパティを定義し、親コンポーネントから別のプロパティとして値を渡すことができます。私が意味するのはsthです。

placeholderInternal: Ember.computed('placeholder', function() { 
    // return the value passed from parent component if exists; return the default value otherwise 
    return this.get('placeholder') || 'foo'; 
    }) 

この計算されたプロパティは、テンプレート内のプレースホルダとして使用されます。私が実際に書いたものを見るには、以下のtwiddleをチェックしてください。 Emberは、計算されたプロパティの特徴に関して非常に強力です。私はできる限りそれに頼ることを好む。ところで、placeholderプロパティをbasic-inputsuper-input.hbs以内に渡す必要があります。これは、私がすでに旋盤でやったことです。

+0

お返事ありがとうございます。理想的には内部コンポーネントは内部コンポーネントであることを知らず、(B)場合によっては内部コンポーネントがサードパーティライブラリである場合があるため、内部コンポーネントを変更する必要はありません。 。 –

+0

これがあなたが望むならば。 'super-component'の中で述べた計算されたプロパティを定義し、それを' inner-component'に渡す必要があります。あなたは私に旋律を修正してもらいたいですか? – alptugd

関連する問題