Skip to content

Instantly share code, notes, and snippets.

@kshitij-srv
Last active December 16, 2020 20:27
Show Gist options
  • Save kshitij-srv/60af00603b5996e9fa36aa32d1e3789a to your computer and use it in GitHub Desktop.
Save kshitij-srv/60af00603b5996e9fa36aa32d1e3789a to your computer and use it in GitHub Desktop.
Dynamic Layouts
import Ember from 'ember';
const {
Component, get, set, observer, run, HTMLBars
} = Ember;
export default Component.extend({
layoutSource: '',
sourceObserver: observer('layoutSource', function() {
this.updateLayout();
}),
didInsertElement() {
this.updateLayout();
},
updateLayout() {
set(this, 'dynamicLayout', null);
run.scheduleOnce('afterRender', this, function() {
set(this, 'dynamicLayout', HTMLBars.compile(get(this, 'layoutSource')));
});
},
actions: {
setTemplate1(val) {
let template1 = `
<div class='temp1'>${val}</div>
<style>
.temp1 {
margin-top: 10px;
padding: 10px;
color: black;
}
</style>
`;
set(this, 'layoutSource', template1);
},
setTemplate2(val) {
let template2 = `
<div class='temp2'>${val}</div>
<style>
.temp2 {
margin-top: 10px;
background-color: black;
padding: 10px;
color: white;
}
</style>
`;
set(this, 'layoutSource', template2);
}
}
});
import Ember from 'ember';
export default Ember.Component.extend({
});
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle'
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
{{my-component}}
<br>
<br>
<div style="display: inline-bock">
<div style="text-align: center">
{{textarea type='text' value=myText placeholder='enter text here'}}
</div>
<div style="text-align: center">
<button role='button' {{action 'setTemplate1' myText}}>Template 1</button>
<button role='button' {{action 'setTemplate2' myText}}>Template 2</button>
</div>
<div style="text-align: center">
{{#if dynamicLayout}}
{{my-dynamic-component layout=dynamicLayout}}
{{/if}}
</div>
</div>
{
"version": "0.14.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": "2.18.2",
"ember-template-compiler": "2.18.2",
"ember-testing": "2.18.2"
},
"addons": {
"ember-data": "2.18.2"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment