Skip to content

Instantly share code, notes, and snippets.

@viniciussbs
Created May 24, 2020 21:34
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 viniciussbs/adaef9654c9b228b55f2aa9a56133709 to your computer and use it in GitHub Desktop.
Save viniciussbs/adaef9654c9b228b55f2aa9a56133709 to your computer and use it in GitHub Desktop.
each-in and tracked properties
import Controller from '@ember/controller';
import { action } from '@ember/object';
import { tracked } from '@glimmer/tracking';
class Me {
tired = null
hungry = null
constructor(me) {
this.tired = me.tired;
this.hungry = me.hungry;
}
}
class TrackedMe {
@tracked tired = null
@tracked hungry = null
constructor(me) {
this.tired = me.tired;
this.hungry = me.hungry;
}
}
export default class ApplicationController extends Controller {
@tracked me = {
tired: 'yes',
hungry: 'sure',
}
@tracked alsoMe = new Me({
tired: 'yes',
hungry: 'sure',
})
@tracked trackedMe = new TrackedMe({
tired: 'yes',
hungry: 'sure',
})
@action
justKidding() {
// won't trigger a new render, as expected
this.me.tired = 'no';
this.me.hungry = 'no';
// won't trigger a new render, as expected
this.alsoMe.tired = 'no';
this.alsoMe.hungry = 'no';
// will trigger a new render, as expected
this.trackedMe.tired = 'no';
this.trackedMe.hungry = 'no';
}
}
WILL NOT re-render, as expected
<br>
{{#each-in this.me as |key value|}}
<strong>{{key}}</strong>? <em>{{value}}</em>
<br>
{{/each-in}}
<br>
WILL NOT re-render, as expected
<br>
{{#each-in this.alsoMe as |key value|}}
<strong>{{key}}</strong>? <em>{{value}}</em>
<br>
{{/each-in}}
<br>
FAILED! `each-in` does not work with tracked properties
<br>
{{#each-in this.trackedMe as |key value|}}
<strong>{{key}}</strong>? <em>{{value}}</em>
<br>
{{/each-in}}
<br>
WILL re-render, as expected
<br>
<strong>tired</strong>? <em>{{this.trackedMe.tired}}</em>
<br>
<strong>hungry</strong>? <em>{{this.trackedMe.hungry}}</em>
<br>
<br>
<button {{on "click" this.justKidding}}>
Really?
</button>
{
"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"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment