这是 Ember Data 提供的 Serializer 的职责之一。我猜您正在使用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));
},
});
assign
如果您不支持 IE 11,则不需要使用 polyfill 。在这种情况下,它将是:
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));
}
}