Skip to content

Instantly share code, notes, and snippets.

@Gaurav0
Forked from NullVoxPopuli/components.demo\.hbs
Created June 15, 2020 18:53
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 Gaurav0/d3eb4ea4ef225e048c1ad77e7a51cf77 to your computer and use it in GitHub Desktop.
Save Gaurav0/d3eb4ea4ef225e048c1ad77e7a51cf77 to your computer and use it in GitHub Desktop.
Repro 18969
<ol>
<li>Open browser dev tools</li>
<li>click "Make True"</li>
<li>click "Make False"</li>
<li>Notice an error in the console</li>
</ol>
<button {{on 'click' this.makeTrue}}>
Make True
</button>
<button {{on 'click' this.makeFalse}}>
Make False
</button>
<hr>
{{#if (eq this.data.kind 'foo')}}
Some Deep Render Requiring nested Data, based on the assumpting that kind is foo
<SubComponent @data={{this.data}} />
{{else}}
Click "Make True"
{{/if}}
<hr>
<pre>this.data =
{{as-formatted-string this.data}}
</pre>
import Component from '@glimmer/component';
import { action } from '@ember/object';
import { tracked } from '@glimmer/tracking';
class Data {
@tracked kind;
@tracked nestedData;
constructor(kind, nestedData) {
this.kind = kind;
this.nestedData = nestedData;
}
toJSON() {
let { kind, nestedData } = this;
return { kind, nestedData };
}
}
export default class DemoRoot extends Component {
@tracked data;
@action
makeTrue() {
this.data = new Data('foo', new Data('baz'));
}
@action
makeFalse() {
this.data = new Data('bar');
}
}
<span {{data-attributes-from this.derivedData}}>{{@data.kind}}</span>
import Component from '@glimmer/component';
import { action } from '@ember/object';
import { tracked } from '@glimmer/tracking';
export default class SubComponent extends Component {
get derivedData() {
return this.args.data.nestedData.kind;
}
}
<h1>
Reproduction of
<Link href="https://github.com/emberjs/ember.js/issues/18969">
emberjs/ember.js#18969
</Link>
</h1>
import Controller from '@ember/controller';
export default class ApplicationController extends Controller {
appName = 'Ember Twiddle';
}
import { helper } from '@ember/component/helper';
export default helper(function asFormattedString([a]/*, hash*/) {
return a ? JSON.stringify(a, null, 2) : `${a}`;
});
import { helper } from '@ember/component/helper';
export default helper(function eq([a, b]/*, hash*/) {
return a === b;
});
import Modifier from 'ember-modifier';
export default class DataAttributesFrom extends Modifier {
didReceiveArguments() {
console.log(this.element);
this.element.dataset['appliedData'] = this.args.positional[0];
}
}
body {
padding: 1rem;
}
<link rel="stylesheet" href="https://cdn.shoelace.style/1.0.0-beta.25/shoelace.css">
<Title />
<br><br>
<Demo />
{
"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-modifier": "1.0.3"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment