2017-04-20 7 views
1

コンポーネントのすべてのインスタンスのプロパティを更新できますか?Ember JS - コンポーネントのすべてのインスタンスのプロパティを更新します。

ページ上に以下のコンポーネントのインスタンスが10個ある場合は、すべてのコンポーネントでcurrentTrackプロパティをfalseに設定したいと考えています。これは可能ですか? 1つのコンポーネントの内部から行うことはできますか?私はあなたがこのユースケースのためEmber.Eventedを使用することができますエンバー2.12

+1

あなたは、私が思うに、この自分をロールバックする必要があります。 'init'フックでは、グローバル配列か何かでインスタンスを「登録」。そして、それらすべてを通過し、あなたが好きなんクラスレベルの方法を提供します。 –

答えて

2

使用してい

import Ember from 'ember'; 

export default Ember.Component.extend({ 

    currentTrack: true, 

}); 

ここにはsimple twiddleがあります。

0

template.hbs

{{your-component-name currentTrack=currentTrack}} 
{{your-component-name currentTrack=currentTrack}} 
{{your-component-name currentTrack=currentTrack}} 
// btn for disabling 
<a href="#" class="btn" onclick={{action 'makeAllcurrentTracksFalse'}}>To false</a> 

controller.js

currentTrack: true, 
actions: { 
    makeAllcurrentTracksFalse() {this.set('currentTrack', false)} 
} 

たり、成分-name.jsで - あなたは上記と同じアクションを使用することができますし、それがすべてに適用されますあなたについてyour'reを達成しようと、これまでどのようなもののためにエントリを作成する方法コンポーネント

0

。エントリを作成するには

const SongEntry = Ember.Object.extend({ 

}); 

あなたは(おそらくプレイリストに曲を追加しますか?)を呼び出します

songs: [], 

    addNewSongToList: function(songName) { 
     const newEntry = MyMusicEntry.create({ 
      isCurrent: false, 
      title: songName 
     }); 

     this.get('songs').pushObject(newEntry); 
    }, 

    activateNewSong: function(newSongToActivate) { 
    this.get('songs').forEach(s => s.set('isCurrent', false); 

    newSongToActivate.set('isCurrent', true) 
    } 

テンプレートは、私の歌成分//この

{{each songs as |song|}} 
    {{my-song-component songEntry=song changeSong=(action "activateNewSong")}} 
{{/each}} 

次のようになります.js

<div class="song-layout" {{action "changeSong" song}}> 
関連する問題