I have artist, album, track pages. Tracks are related to artist, track can have many artists. I have an artist page with listing artist's top tracks and albums. Problem is When i load album, album tracks are appended to toptracks after i updated the serializer with embeddedRecordsMixin
Please help me to figure it out.
json response from backend API: "id": 12, "title": "test track", "artist": "test artist", "artists": [ { "id": 168, "name": "test artist" } ] },
//serializer, application serializer is a RESTAPISerializer
export default ApplicationSerializer.extend(EmbeddedRecordsMixin, {
attrs: {
artists: {
deserialize: 'ids',
serialize: false
}
}
});
//artist model
export default Model.extend({
active: attr('boolean'),
name: attr(),
cover: attr(),
like_count: attr(),
releases: hasMany('album'),
toptracks: hasMany('track'),
albums: Ember.computed.filterBy('releases', 'single', false).readOnly(),
singles: Ember.computed.filterBy('releases', 'single', true).readOnly(),
});
//album model
export default Model.extend({
title: attr(),
artist: attr(),
single: attr('boolean'),
release_date: attr('string'),
cover: attr(),
like_count: attr('number'),
tracks: hasMany('track', {async:true}),
artists: attr(),
discs: Ember.computed('tracks.[]', function(){
return this.get('tracks').reduce(function(disc, track) {
var id = track.get('disc');
if (disc[id]) {
disc[id].tracks.push(track);
} else {
disc[id] = {'tracks': [track]};
}
return disc;
}, {});
}).readOnly(),
groupDiscs: Ember.computed('tracks.[]', function() {
return _.uniq(this.get('tracks').mapBy('disc')).length > 1;
}).readOnly()
});
//track model
export default Model.extend({
album: belongsTo('album'),
icon: attr(),
title: attr(),
artist: attr(),
explicit: attr('boolean'),
duration: attr(),
disc: attr('number'),
seq: attr('number'),
active: attr('boolean'),
like_count: attr('number'),
minutes: Ember.computed('duration', function() {
var duration = this.get('duration');
if (duration) {
return duration.substring(3);
}
}),
playing: false,
artists: hasMany('artist')
});
Aucun commentaire:
Enregistrer un commentaire