Skip to content

Instantly share code, notes, and snippets.

@DingoEatingFuzz
Created January 19, 2022 17:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save DingoEatingFuzz/a8b1b503f15f0c20fde2afe1be5d5bcb to your computer and use it in GitHub Desktop.
Save DingoEatingFuzz/a8b1b503f15f0c20fde2afe1be5d5bcb to your computer and use it in GitHub Desktop.
push-with-spread
import Controller from '@ember/controller';
export default class ApplicationController extends Controller {
appName = 'Ember Twiddle';
}
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo, hasMany } from 'ember-data/relationships';
export default class extends Model {
@hasMany('other') other;
}
import Model from 'ember-data/model';
/*
import attr from 'ember-data/attr';
import { belongsTo, hasMany } from 'ember-data/relationships';
*/
export default class extends Model {
}
import Route from '@ember/routing/route';
export default Route.extend({
model() {
// Step 1: Create a very large array to sideload into the store
let payload = new Array(200000)
.fill(null)
.map((_, id) => ({ id, type: 'other' }));
// Step 2: Load in the very large array beside a primary array of whatever length
let serializer = this.store.serializerFor('obj');
let model = this.store.modelFor('obj');
try {
let normalized = serializer.normalizeArrayResponse(this.store, model, {
obj: [{ id: 1 }],
other: payload,
})
this.store.push(normalized);
return {
obj: this.store.peekAll('obj'),
other: this.store.peekAll('other'),
};
} catch (err) {
// Step 3: Receive max stack error
return { err };
}
}
});
import Serializer from '@ember-data/serializer/rest';
export default class ApplicationSerializer extends Serializer {
}
import ApplicationSerializer from './application';
import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';
const Base = ApplicationSerializer;//.extend(EmbeddedRecordsMixin);
export default class ObjSerialzier extends Base {
// attrs = {
// other: {
// embedded: 'always',
// }
// }
}
{{#if this.model.err}}
<strong style="color:red;">{{this.model.err.message}}</strong>
<p>{{this.model.err.stack}}</p>
{{else}}
<h1>There are {{this.model.obj.length}} primary <code>obj</code> records</h1>
<em>But {{this.model.other.length}} records were sideloaded</em>
{{/if}}
{
"version": "0.17.1",
"EmberENV": {
"FEATURES": {},
"_TEMPLATE_ONLY_GLIMMER_COMPONENTS": false,
"_APPLICATION_TEMPLATE_WRAPPER": true,
"_JQUERY_INTEGRATION": true
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js",
"ember": "3.18.1",
"ember-template-compiler": "3.18.1",
"ember-testing": "3.18.1"
},
"addons": {
"@glimmer/component": "1.0.0",
"ember-data": "3.18.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment