Skip to content

Instantly share code, notes, and snippets.

@mistahenry
Created May 21, 2019 12:46
Show Gist options
  • Save mistahenry/7b8cd9122c41bef1b8983ca3a2bc3281 to your computer and use it in GitHub Desktop.
Save mistahenry/7b8cd9122c41bef1b8983ca3a2bc3281 to your computer and use it in GitHub Desktop.
Dynamic computed property creation
import Ember from 'ember';
import { defineProperty, computed } from '@ember/object';
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
init(){
this._super(...arguments);
// define a computed property
let object = {
foo: 'foo',
bar: 'bar'
}
this.set('myObj', object);
let keys = Object.keys(object).map((key) => {
return `myObj.${key}`
});
console.log(keys);
defineProperty(this, 'someComputed', computed.apply(this, [...keys, function() {
return `${this.myObj.foo} ${this.myObj.bar}`;
}]));
},
actions: {
changeFoo(){
this.set('myObj.foo', 'changed foo');
},
changeBar(){
this.set('myObj.bar', 'changed bar');
}
}
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
<label>Dynamically created computed observing all keys of foo</label><br> {{someComputed}}
<br>
<br>
<button {{action 'changeFoo'}}>Change foo</button>
<button {{action 'changeBar'}}>Change bar</button>
{
"version": "0.15.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": "3.4.3",
"ember-template-compiler": "3.4.3",
"ember-testing": "3.4.3"
},
"addons": {
"ember-data": "3.4.2"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment