Ich habe Künstler, Album, Track-Seiten. Tracks sind mit dem Künstler verwandt, Track kann viele Künstler haben. Ich habe eine Künstlerseite mit den Top-Titeln und Alben des Künstlers. Problem ist, wenn ich Album lade, Albumspuren an toptracks angehängt werden, nachdem ich den Serializer mit embeddedRecordsMixin
aktualisiert habe Bitte helfen Sie mir, es herauszufinden.Ember Embedded Record Mixin Append verwandte Modell
json Antwort von Back-End-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')
});