2016-01-26 9 views
7

例: Emberコンポーネントを使用すると、classNames配列を追加できます。これらのクラスは、コンポーネントのメインdivに追加されます。 は、我々は、このコンポーネントが呼び出されていると言う新しい-DIVあなたが表示されますレンダリングされたときに、このコンポーネントを検査した場合、その後ember 2.0コンポーネントで動的クラス名を作成するにはどうすればよいですか?

export default Ember.Component.extend({ 
    classNames: ['container'] 
}); 

<div id="ember595" class="ember-view container"> 
... 
<div> 

これは大丈夫ですが、私の問題は私がしたい場合は何ですこのコンポーネントを液体コンテナとして使用することがあります。時にはそれをジャンボトロンなどにすることもできます。

htmlでこれを行い、component.jsを正しく適用する方法はありますか? component.jsで、その後

{{new-div extra-classes='class1,class2'}} 

export default Ember.Component.extend({ 
    classNames: [this.get('class-names')] 
}); 
+0

[classNameBindings](http://emberjs.com/api/classes/Ember.Component.html#property_classNameBindings)をご覧ください。 –

+1

@Craicerjack 'classNames'は' classNameBindings'ではありません –

答えて

8
あなたのコンポーネントに class属性内でそれらを指定するだけで、クラス名を追加することができ

:ちょうど代わるものとして

{{new-div class="class1 class2"}} 
+0

haha​​!ありがとう!私はこの1つではあまりにも難しいと思っていた! – pfg

+0

は 'classNames'属性ではありませんか、これは最近変更されましたか? – akst

+1

@ABot私は 'class'がhtmlbarsに移動してより良い選択肢になってから動作すると思いますが、' classNames'もまだ動作しています。 – dmk

0

このようなものを使用できます

export default Ember.Component.extend({ 
attributeBindings: ['style'], 

    style: function(){ 
     return new Ember.Handlebars.SafeString('class="foo bar"'); 
    }.property(), 
}); 

// NOT sure on this one untested 
export default Ember.Component.extend({ 
attributeBindings: ['classNames'], 

    classNames: function(){ 
     return 'foo bar'; 
    }.property(), 
}); 
12

@dmk'solutionはきれいなものですが、あなたがclassNameBindingsを使用することができます動作していない、あなたのシナリオ場合:

export default Ember.Component.extend({ 
    classNameBindings: ['getClassNames'], 
    getClassNames: Ember.computed('extra-classes', function(){ 
    return this.get('extra-classes').replace(',', ' '); 
    }) 
}) 
+0

このコンポーネントは、コンポーネントが独自のクラス名を制御したい場合に最適です。 – Skitterm

+0

これは 'classNameBindings:['myClassNames']、' myClassNames'はテンプレート上で宣言された属性です。計算されたプロパティは必要ありません(OPはカンマで区切られたリストがあるため、あなたの例ではもちろんです)。 – Jason

0

誰かがエンバー成分-CSSを使用している場合、あなたはjoin-classesかを試してみたいことlocal-class属性ヘルパー。

{{join-classes styles.myclass1 attributeValue}} 

attributeValueコンポーネントのコントローラ(私はcomponent.jsを意味する)、又はeachブロック内の項目の値とすることができます。

styles.myclass1 = .class1た場合、およびattributeValue = .dummy、そしてセレクタはStyles.cssをで​​として利用できるようになります。

local-class={{(concat "myclass-" myvalue)}} 

myvalue = 'part'場合、これで、生成されたクラス名は、tree-to-component_myclass-part__sdfje2jbr2(最後の部分は、IDが生成される)を含むであろう、そして.myclass-partなどのスタイルシートにアクセス可能になります。

関連する問題