DS.Serializer
DS.Serializer Class
Extends: Ember.Object
Defined in: addon/serializer.js:7
Module: ember-data
DS.Serializer
is an abstract base class that you should override in your application to customize it for your backend. The minimum set of methods that you should implement is:
normalizeResponse()
serialize()
And you can optionally override the following methods:
normalize()
For an example implementation, see DS.JSONSerializer, the included JSON serializer.
normalize (typeClass, hash) Object
The normalize
method is used to convert a payload received from your external data source into the normalized form store.push()
expects. You should override this method, munge the hash and return the normalized payload.
Example:
Serializer.extend({ normalize(modelClass, resourceHash) { var data = { id: resourceHash.id, type: modelClass.modelName, attributes: resourceHash }; return { data: data }; } })
Parameters:
-
typeClass
DS.Model
-
hash
Object
Returns:
-
Object
normalizeResponse (store, primaryModelClass, payload, id, requestType) Object
The normalizeResponse
method is used to normalize a payload from the server to a JSON-API Document.
http://jsonapi.org/format/#document-structure
Example:
Serializer.extend({ normalizeResponse(store, primaryModelClass, payload, id, requestType) { if (requestType === 'findRecord') { return this.normalize(primaryModelClass, payload); } else { return payload.reduce(function(documentHash, item) { let { data, included } = this.normalize(primaryModelClass, item); documentHash.included.push(...included); documentHash.data.push(data); return documentHash; }, { data: [], included: [] }) } } });
Parameters:
Returns:
-
Object
- JSON-API Document
serialize (snapshot, options) Object
The serialize
method is used when a record is saved in order to convert the record into the form that your external data source expects.
serialize
takes an optional options
hash with a single option:
-
includeId
: If this istrue
,serialize
should include the ID in the serialized object it builds.
Example:
Serializer.extend({ serialize(snapshot, options) { var json = { id: snapshot.id }; snapshot.eachAttribute((key, attribute) => { json[key] = snapshot.attr(key); }); snapshot.eachRelationship((key, relationship) => { if (relationship.kind === 'belongsTo') { json[key] = snapshot.belongsTo(key, { id: true }); } else if (relationship.kind === 'hasMany') { json[key] = snapshot.hasMany(key, { ids: true }); } }); return json; }, });
Parameters:
-
snapshot
DS.Snapshot
-
options
[Object]
Returns:
-
Object
store{DS.Store}
public
The store
property is the application's store
that contains all records. It can be used to look up serializers for other model types that may be nested inside the payload response.
Example:
Serializer.extend({ extractRelationship(relationshipModelName, relationshipHash) { var modelClass = this.store.modelFor(relationshipModelName); var relationshipSerializer = this.store.serializerFor(relationshipModelName); return relationshipSerializer.normalize(modelClass, relationshipHash); } });
© 2017 Yehuda Katz, Tom Dale and Ember.js contributors
Licensed under the MIT License.
https://emberjs.com/api/data/classes/DS.Serializer.html