Skip to content

Instantly share code, notes, and snippets.

@chancancode
Last active October 10, 2018 18:04
Show Gist options
  • Save chancancode/70b45d9d09cc93affbf0da330c7f767d to your computer and use it in GitHub Desktop.
Save chancancode/70b45d9d09cc93affbf0da330c7f767d to your computer and use it in GitHub Desktop.
New Twiddle
import ActiveModelAdapter from 'active-model-adapter';
export default ActiveModelAdapter.extend({
shouldBackgroundReloadRecord() {
return false;
}
});
import Adapter from 'ember-data/adapter';
export default Adapter.extend({
findRecord() {
return new Promise(() => { /* never resolve */ });
}
});
import Ember from 'ember';
let COMPUTED = 0;
export default Ember.Component.extend({
commentsLoaded: Ember.computed('[email protected]', function() {
let count = ++COMPUTED;
document.getElementById('computed').innerText = count;
return this.get('posts').every(post => post.get('commentsLoaded'));
})
});
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle'
});
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo, hasMany } from 'ember-data/relationships';
export default Model.extend({
posts: hasMany({ async: true })
});
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo, hasMany } from 'ember-data/relationships';
export default Model.extend({
});
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo, hasMany } from 'ember-data/relationships';
import Ember from 'ember';
export default Model.extend({
comments: hasMany({ async: true }),
commentsLoaded: Ember.computed.alias('comments.isSettled'),
});
import Ember from 'ember';
export default Ember.Route.extend({
model() {
return Promise.resolve().then(() => {
this.store.pushPayload('blog', {
blog: {
id: 'blog-0',
post_ids: [
'post-0',
'post-1',
'post-2',
'post-3',
'post-4',
'post-5',
'post-6',
'post-7',
'post-8',
'post-9',
'post-10',
// uncomment this last one to trigger an infinite re-render assertion
// 'post-11'
]
}
});
}).then(() => {
return this.store.findRecord('blog', 'blog-0');
});
}
});
<p>Uncomment the last post id in application route to see the bug.</p>
<div>Computed: <span id="computed">0</span></div>
<MyBlog @posts={{this.model.posts}} />
Comments: {{#if this.commentsLoaded}}loaded!{{else}}loading...{{/if}}
{
"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.5",
"ember-template-compiler": "3.4.5"
},
"addons": {
"ember-data": "3.4.1",
"active-model-adapter": "2.2.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment