Skip to content

Instantly share code, notes, and snippets.

@teddyzeenny
Last active October 20, 2020 20:47
Show Gist options
  • Save teddyzeenny/6580d58e0a3010daf5120261bea9be06 to your computer and use it in GitHub Desktop.
Save teddyzeenny/6580d58e0a3010daf5120261bea9be06 to your computer and use it in GitHub Desktop.
Bug dependentKeyCompat
import Controller from '@ember/controller';
import { tracked } from '@glimmer/tracking';
import { dependentKeyCompat } from '@ember/object/compat';
import { computed, action } from '@ember/object';
class MyClass {
@tracked
count = 0;
@dependentKeyCompat
get count1() {
return this.count;
}
@computed('count1')
get count2() {
return this.count1;
}
@tracked
isVisible = true;
@action
toggle() {
this.isVisible = false;
setTimeout(() => {
this.count++;
this.isVisible = true;
});
}
}
export default class ApplicationController extends Controller {
@tracked
myClass = new MyClass();
}
<button type="button" {{on "click" this.myClass.toggle}}>
Toggle
</button>
<br>
<br>
{{!--
The two properties (count1 and count2) are aliases and should always be the same. However, when you click on toggle, the numbers will diverge.
To make it work correctly, you can just swap count1 and count in the template below.
--}}
{{#if this.myClass.isVisible}}
count1: {{this.myClass.count1}}
<br>
count2: {{this.myClass.count2}}
{{/if}}
<br>
<br>
{
"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