トラックモデルとトラックのコレクションがあります。モデル自体には、単一のトラックを再生する関数play()があります。コレクションは、単一のトラック(リストの順序)が終了したときに、各トラックを次々に再生できる必要があります。
モデル:
app.Track = Backbone.Model.extend({
defaults: {...},
initialize: {...},
play: function(playlist) {
if(finished && playlist) {
Backbone.pubSub.trigger('finishedPlaybackLoadNext')
} else {
Backbone.pubSub.trigger('finishedPlayback')
}
},
})
コレクション:
var TrackList = Backbone.Collection.extend({
model: app.Track,
nextOrder: function() {...},
comparator: function( track ) {...},
playAll: function() {
this.models.forEach(function(item) {
item.play(true); //true = play as playlist
});
}
})
予想どおり、forEachは、リスト内の個々のモデルごとに再生が完了するまで待機しません。どうすればこの種の待機を実現できますか?
編集:イベントにグローバルトリガー/サブスクライバーを使用して、さまざまなビュー内でイベントを共有しています。
Backbone.pubSub = _.extend({}, Backbone.Events);