Это одна из обязанностей Сериализатора, предоставляемого Ember Data. Я полагаю, вы используете RestSerializer
, который обычно используется вместе с RestAdapter
, не так ли? В этом случае вам следует настроить метод serializeIntoHash()
. Просто не использовать пространство имен следует:
import RESTSerializer from '@ember-data/serializer/rest';
export default RESTSerializer.extend({
serializeIntoHash(data, type, record, options) {
data = this.serialize(record, options);
}
});
Чтобы не потерять данные, которые уже присутствуют в hash
, вы можете использовать Object.assign()
. Это также то, что сделано в JSONSerializer
:
import { assign, merge } from '@ember/polyfills';
const emberAssign = assign || merge;
export default RESTSerializer.extend({
serializeIntoHash(hash, typeClass, snapshot, options) {
emberAssign(hash, this.serialize(snapshot, options));
},
});
assign || merge
необходим только для поддержки очень старых версий ember. Вы можете упростить до:
import { assign } from '@ember/polyfills';
export default RESTSerializer.extend({
serializeIntoHash(hash, typeClass, snapshot, options) {
assign(hash, this.serialize(snapshot, options));
},
});
Вам не нужно использовать polyfill для assign
, если вы не поддерживаете IE 11. В этом случае это будет:
export default RESTSerializer.extend({
serializeIntoHash(hash, typeClass, snapshot, options) {
Object.assign(hash, this.serialize(snapshot, options));
},
});
А с нативным классом это выглядит так:
export default class ApplicationSerializer extends RESTSerializer {
serializeIntoHash(hash, typeClass, snapshot, options) {
Object.assign(hash, this.serialize(snapshot, options));
}
}