我需要在 ember.js 适配器中自定义序列化程序
I need to Customize the serializer in ember.js Adapter
我的服务器在发送 PUT 请求时需要 json 以下格式。
我的服务器是使用 struts2 rest 插件设计的 rest api。
{
id: "5",
empId: "5",
firstName: "oki",
lastName: "iko",
edQual: "phd"
}
but the RESTAdapter serializes it to
[
employees:
{
id: "5",
empId: "5",
firstName: "oki",
lastName: "iko",
edQual: "phd"
}
]
我尝试忽略后端中的属性,但这只是忽略了整个 json 并向 sql-服务器提交了空值。
我需要覆盖或自定义 ember.js 的序列化,但我不知道该怎么做。
这是 Ember Data 提供的序列化程序的职责之一。我猜您正在使用 RestSerializer
,它通常与 RestAdapter
一起使用,对吗?在那种情况下,您应该自定义 serializeIntoHash()
method。完全不使用名称空间应该通过以下方式完成:
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));
},
});
如果您不支持 IE 11,则无需为 assign
使用 polyfill。在这种情况下,它将是:
export default RESTSerializer.extend({
serializeIntoHash(hash, typeClass, snapshot, options) {
Object.assign(hash, this.serialize(snapshot, options));
},
});
原生 class 看起来像:
export default class ApplicationSerializer extends RESTSerializer {
serializeIntoHash(hash, typeClass, snapshot, options) {
Object.assign(hash, this.serialize(snapshot, options));
}
}
我的服务器在发送 PUT 请求时需要 json 以下格式。 我的服务器是使用 struts2 rest 插件设计的 rest api。
{
id: "5",
empId: "5",
firstName: "oki",
lastName: "iko",
edQual: "phd"
}
but the RESTAdapter serializes it to
[
employees:
{
id: "5",
empId: "5",
firstName: "oki",
lastName: "iko",
edQual: "phd"
}
]
我尝试忽略后端中的属性,但这只是忽略了整个 json 并向 sql-服务器提交了空值。 我需要覆盖或自定义 ember.js 的序列化,但我不知道该怎么做。
这是 Ember Data 提供的序列化程序的职责之一。我猜您正在使用 RestSerializer
,它通常与 RestAdapter
一起使用,对吗?在那种情况下,您应该自定义 serializeIntoHash()
method。完全不使用名称空间应该通过以下方式完成:
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));
},
});
如果您不支持 IE 11,则无需为 assign
使用 polyfill。在这种情况下,它将是:
export default RESTSerializer.extend({
serializeIntoHash(hash, typeClass, snapshot, options) {
Object.assign(hash, this.serialize(snapshot, options));
},
});
原生 class 看起来像:
export default class ApplicationSerializer extends RESTSerializer {
serializeIntoHash(hash, typeClass, snapshot, options) {
Object.assign(hash, this.serialize(snapshot, options));
}
}