Skip to content

Instantly share code, notes, and snippets.

@runspired
Last active April 19, 2021 18:32
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 runspired/22144bd4c538f1a23c4613234bfcd39e to your computer and use it in GitHub Desktop.
Save runspired/22144bd4c538f1a23c4613234bfcd39e to your computer and use it in GitHub Desktop.
Tracked Dirtying
import Controller from '@ember/controller';
import { tracked } from '@glimmer/tracking';
let renderCount = 0;
function trackedWithCache(target, key, desc) {
let _v;
let d = tracked(target, key, desc);
return {
configurable: true,
enumerable: true,
get() {
_v = d.get.call(this);
return _v;
},
set(v) {
if (v !== v) {
d.set.call(this, v);
}
}
}
}
export default class ApplicationController extends Controller {
appName = 'Ember Twiddle';
constructor() {
super(...arguments);
setInterval(() => {
console.count('updated');
this.myBool = false;
}, 1000);
}
@trackedWithCache myBool = false;
get trackedCount() {
this.myBool; // subscribe
return ++renderCount;
}
get count() {
return ++renderCount;
}
}
<h1>Welcome to {{this.appName}}</h1>
<br>
MyBool is {{if this.myBool 'true' ' false'}}
<br>
Render Count is: {{this.trackedCount}}
<br>
{{outlet}}
<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