Skip to content

Instantly share code, notes, and snippets.

@raido
Last active January 5, 2016 14:06
Show Gist options
  • Save raido/efc6b04753e705b40bbc to your computer and use it in GitHub Desktop.
Save raido/efc6b04753e705b40bbc to your computer and use it in GitHub Desktop.
extactMeta + query + JSONSerializer
import Ember from 'ember';
export default Ember.Controller.extend({
appName:'Ember Twiddle'
});
import Ember from 'ember';
export default Ember.Route.extend({
model() {
return this.get('store').query('user');
},
setupController(controller, model) {
this._super(...arguments);
controller.set('metadata', JSON.stringify(model.get('meta')));
}
});
import DS from 'ember-data';
export default DS.JSONSerializer.extend({
extractMeta (store, modelClass, payload) {
// Only pitfall, that this is called twice
// First from normalizeQueryResponse below and
// second time from private _normalizeResponse
// so you probably need some conditionals here
// OR you could rename it "myExtractMeta" - then theres no twice function call
return payload.pagination;
},
normalizeQueryResponse (store, primaryModelClass, payload, id, requestType) {
let meta = this.extractMeta(store, primaryModelClass, payload)
let doc = this._super(store, primaryModelClass, payload.result, id, requestType);
doc.meta = meta;
return doc;
}
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
{{outlet}}
<br>
<br>
List of users:
<ul>
{{#each model as |user|}}
<li>{{user.name}}</li>
{{/each}}
</ul>
Metadata:
<p>{{metadata}}</p>
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string')
});
{
"version": "0.4.17",
"EmberENV": {
"FEATURES": {}
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/2.2.0/ember.debug.js",
"ember-data": "https://cdnjs.cloudflare.com/ajax/libs/ember-data.js/2.2.0/ember-data.js",
"ember-template-compiler": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/2.2.0/ember-template-compiler.js"
}
}
import DS from 'ember-data';
export default DS.Adapter.extend({
query() {
return {
result: [{
id: 1,
name: 'User'
},{
id: 2,
name: 'Second User'
}],
pagination: {
page: 1,
total: 100
}
}
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment