すぐにあなたのために何かを実装しました。これは@Deewendraのコメントを拡大します。アプリは2つの類似した部分で構成されています。
サービスディレクトリ内のオーディオプレーヤーサービス
export default Ember.Service.extend({
ids: [0,1,2,3,4,5,6,7,8,9,10],
songs: Ember.computed('ids',function(){
return this.get('ids').map(id => {
return { id: id, title: `Awesome Song ${id}`}
})
}),
currentlyPlaying: '',
currentIndex: 0,
currentStatus: 'stopped',
start() {
this.setSongByIndex();
this.set('currentStatus','playing');
},
stop(){
this.set('currentStatus','stopped');
},
nextSong() {
let maxIndex = this.get('ids.length') - 1;
let currentIndex = this.get('currentIndex');
let nextIndex = currentIndex + 1;
if (nextIndex > maxIndex) {
this.stop();
} else {
this.set('currentIndex',nextIndex);
this.setSongByIndex();
}
},
previousSong() {
let maxIndex = this.get('ids.length') - 1;
let currentIndex = this.get('currentIndex');
let prevIndex = currentIndex - 1;
if (prevIndex < 0) {
this.stop();
} else {
this.set('currentIndex',prevIndex);
this.setSongByIndex();
}
},
setSongByIndex() {
const songs = this.get('songs');
const currentIndex = this.get('currentIndex');
this.set('currentlyPlaying',songs[currentIndex]);
}
});
Ember.inject.service()メソッドを使用してサービスに接続されているオーディオプレーヤー成分
// components/audio-player.js
export default Ember.Component.extend({
audioPlayer: Ember.inject.service('audio-player'),
actions: {
start() {
this.get('audioPlayer').start();
},
stop() {
this.get('audioPlayer').stop();
},
next(){
this.get('audioPlayer').nextSong();
},
previous(){
this.get('audioPlayer').previousSong();
}
}
});
// templates/components/audio-player
Song Title: {{audioPlayer.currentlyPlaying.title}} <br/>
Audio Player Status: {{audioPlayer.currentStatus}} <br/>
<button {{action 'start'}}>Start</button> |
<button {{action 'next'}}>Next</button> |
<button {{action 'previous'}}>Previous</button> |
<button {{action 'stop'}}>Stop</button> |
。
あなたが見るように、プレイヤーの「状態」はサービス内にあり、コンポーネントはhtml/handlebarsテンプレートとテンプレートの名前に相当するjavascriptファイル"ビュー"(テンプレート)と "状態"(サービス)の間の対話を処理します。
ここをクリックして実験したtwiddleです。
「フレームワーク」以外のプログラミング、ウェブ技術などに関するあなたの経験は何か分かりませんし、これを2回提出することを考えましたが、それは傷つける以上のものに役立つはずです。
UIを配信するコンポーネントを使用することができます。このコンポーネントは、すべてのコア機能を含むaudioPlayerサービスを利用でき、サービスはデフォルトではシングルトンです(https://guides.emberjs.com/)。 v2.5.0/applications/services /) –