Ember 数据 - 如何反序列化 model.serialize()?
Ember Data - How to deserialize model.serialize()?
在 Ember 数据 3.24 中,如果你这样做
foo = record.serialize()
你怎么能逆转这个过程?即反序列化 foo 中的 JS 对象并更新记录?
Model.serialize()
的逆过程是Store.pushPayload()
:
// push some sample data into Ember Data's store
this.store.push({
data: {
type: 'post',
id: '1',
attributes: {
title: 'foo',
},
},
});
// get the record
const record = this.store.peekRecord('post', '1');
// serialize the record
const serialized = record.serialize({ includeId: true });
// manipulate the record to see the update
// this assumes that the application uses the default JSON:API serializer
serialized.data.attributes.title = 'bar';
// push the new state into the store again
this.store.pushPayload('post', serialized);
// verify that the update is reflected in Ember Data's store
console.log(record.title); // "bar"
请注意 Store.pushPayload()
而不是 return 负载中的记录。
如果你想将一条记录推送到商店并获取那条记录,你可以使用Store.push()
。但是那个人期望一个规范化的 JSON:API 文档遵循 Ember Data.
的内部约定
有效负载可以按照 Ember 数据的内部约定使用 Serializer.normalizeResponse()
方法规范化为 JSON:API 文档。但是它有一个复杂的参数接口,不适合Ember数据的日常使用。
// manipulate serialized state
serialized.data.attributes.title = 'baz';
// normalize the payload to JSON:API document following Ember Data's conventions
const store = this.store;
const model = this.store.modelFor('post');
const normalized = this.store.serializerFor('post').normalizeResponse(this.store, PostModel, serialized, undefined, 'findRecord');
// push it into the store
const result = this.store.push(normalized);
// verify that store has been updated
console.log(record.title); // "baz"
// Store.push() returns the record
console.log(record === result);
如果只处理一条记录,不需要完全逆向的功能,也可以使用Store.normalize()
。假设您的应用程序使用 JSON:API 序列化程序,有效负载也可以像这样规范化:
const normalized = this.store.normalize('post', serialized.data);
this.store.push(normalized);
在 Ember 数据 3.24 中,如果你这样做
foo = record.serialize()
你怎么能逆转这个过程?即反序列化 foo 中的 JS 对象并更新记录?
Model.serialize()
的逆过程是Store.pushPayload()
:
// push some sample data into Ember Data's store
this.store.push({
data: {
type: 'post',
id: '1',
attributes: {
title: 'foo',
},
},
});
// get the record
const record = this.store.peekRecord('post', '1');
// serialize the record
const serialized = record.serialize({ includeId: true });
// manipulate the record to see the update
// this assumes that the application uses the default JSON:API serializer
serialized.data.attributes.title = 'bar';
// push the new state into the store again
this.store.pushPayload('post', serialized);
// verify that the update is reflected in Ember Data's store
console.log(record.title); // "bar"
请注意 Store.pushPayload()
而不是 return 负载中的记录。
如果你想将一条记录推送到商店并获取那条记录,你可以使用Store.push()
。但是那个人期望一个规范化的 JSON:API 文档遵循 Ember Data.
有效负载可以按照 Ember 数据的内部约定使用 Serializer.normalizeResponse()
方法规范化为 JSON:API 文档。但是它有一个复杂的参数接口,不适合Ember数据的日常使用。
// manipulate serialized state
serialized.data.attributes.title = 'baz';
// normalize the payload to JSON:API document following Ember Data's conventions
const store = this.store;
const model = this.store.modelFor('post');
const normalized = this.store.serializerFor('post').normalizeResponse(this.store, PostModel, serialized, undefined, 'findRecord');
// push it into the store
const result = this.store.push(normalized);
// verify that store has been updated
console.log(record.title); // "baz"
// Store.push() returns the record
console.log(record === result);
如果只处理一条记录,不需要完全逆向的功能,也可以使用Store.normalize()
。假设您的应用程序使用 JSON:API 序列化程序,有效负载也可以像这样规范化:
const normalized = this.store.normalize('post', serialized.data);
this.store.push(normalized);