Skip to content

Instantly share code, notes, and snippets.

@sukima
Last active November 29, 2018 15:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sukima/457093835b97d600454b1df511badcf1 to your computer and use it in GitHub Desktop.
Save sukima/457093835b97d600454b1df511badcf1 to your computer and use it in GitHub Desktop.
Serializing Relationships
import Adapter from 'ember-data/adapter';
export default Adapter.extend({
createRecord(_, __, snapshot) {
return this.serialize(snapshot, { includeId: true });
},
updateRecord(_, __, snapshot) {
return this.serialize(snapshot, { includeId: true });
}
});
import ApplicationAdapter from './application';
let nextID = 1;
export default ApplicationAdapter.extend({
generateIdForRecord(_, __, inputProperties) {
return nextID++;;
}
});
import Ember from 'ember';
import { computed } from '@ember/object';
import { reads } from '@ember/object/computed';
export default Ember.Controller.extend({
client: reads('model.client'),
message: reads('model.message'),
serializedClient: computed('client', {
get() {
let json = this.client.serialize({ includeId: true });
return JSON.stringify(json, null, 2);
}
}),
serializedMessage: computed('message', {
get() {
let json = this.message.serialize({ includeId: true });
return JSON.stringify(json, null, 2);
}
})
});
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { or, reads } from '@ember/object/computed';
export default Model.extend({
name: attr('string'),
isEvicted: attr('boolean', { defaultValue: false }),
isSelf: attr('boolean', { defaultValue: false }),
address: reads('id'),
displayName: or('{name,address}')
});
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo, hasMany } from 'ember-data/relationships';
export default Model.extend({
body: attr('string'),
createdAt: attr('string'),
type: attr('number'),
from: belongsTo('client')
});
import Ember from 'ember';
export default Ember.Route.extend({
async model() {
let client = this.store.createRecord('client', {
id: '1',
isSelf: true,
name: 'Alice'
});
await client.save();
let message = this.store.createRecord('message', {
type: 1,
body: 'foobar',
createdAt: new Date().toISOString(),
from: client
});
await message.save();
return { client, message };
}
});
import JSONAPISerializer from 'ember-data/serializers/json-api';
export default JSONAPISerializer.extend();
<h2>Client</h2>
<pre><code>{{this.serializedClient}}</code></pre>
<h2>Message</h2>
<pre><code>{{this.serializedMessage}}</code></pre>
{
"version": "0.15.1",
"EmberENV": {
"FEATURES": {}
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js",
"ember": "3.4.3",
"ember-template-compiler": "3.4.3",
"ember-testing": "3.4.3"
},
"addons": {
"ember-data": "3.4.2"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment