API 1.0 では、一部のデータは自動的に取得されません。これは、理想的には、必要なデータのみをフェッチして、データ トラフィックを減らし、パフォーマンスを向上させることを意味します。欠点は、トラックの配列とアルバム名を自分で作成し、非同期でデータを取得する必要があることです。
取得するトラックごとに、そのアルバムの名前を取得します。これはあなたがそれを行う方法です:
var maxTracks = 15;
var search = Search.search(searchString);
search.tracks.snapshot(0, maxTracks).done(function(snapshot) {
snapshot.toArray().forEach(function(result) {
result.album.load('name').done(function(album) {
// here you have access to the album.name attribute
});
});
}).fail(function() {
console.error('Error retrieving snapshot');
});
このアプローチの問題は、トラックが表示される順序とは異なる順序でデータが表示されることです。順序を維持する必要がある場合は、Promise
オブジェクトを使用できます。
var maxTracks = 15;
var search = Search.search(searchString);
search.tracks.snapshot(0, maxTracks).done(function(snapshot) {
var promises = [];
snapshot.toArray().forEach(function(result) {
promises.push(result.album.load('name'));
});
models.Promise.join(promises)
.done(function(albums) { console.log('Loaded all albums.', albums); })
.fail(function(albums) { console.log('Failed to load at least one album.', albums); });
}).fail(function() {
console.error('Error retrieving snapshot');
});
の配列を使用するPromise
と、トラックと同じ順序が維持されます。