Skip to content

Instantly share code, notes, and snippets.

@ultimatemonty
Last active October 20, 2017 19:59
Show Gist options
  • Save ultimatemonty/ed21e461d2ddbaf4de4bb62478d1ec13 to your computer and use it in GitHub Desktop.
Save ultimatemonty/ed21e461d2ddbaf4de4bb62478d1ec13 to your computer and use it in GitHub Desktop.
Definitions Refactor
import Ember from 'ember';
const objectOneDefinition = {
name: 'foo',
needs: ['service:test'],
testFunc() {
return `${this.name} + ${this.get('test.name')}`;
}
};
const objectTwoDefinition = {
name: 'bar',
needs: ['service:test'],
testFunc() {
return `${this.name} + ${this.get('test.name')}`;
}
};
export default Ember.Controller.extend({
appName: 'Ember TEST',
test: Ember.inject.service(),
object: Ember.computed(function() {
let definition = Ember.$.extend({}, objectOneDefinition);
return this.get('test').definitionFactory(definition);
}).volatile()
});
import Ember from 'ember';
export function initialize(application) {
application.register('object:definition', Ember.Object.extend({
init() {
this._super(...arguments);
if (!Ember.isEmpty(this.get('needs'))) {
this.get('needs').forEach((toBeInjected) => {
let { factoryType, name } = toBeInjected.split(':');
Ember.inject.service(name);
});
}
}
}),
{ instantiate: false });
}
export default {
name: 'base-definition',
initialize: initialize
};
import Ember from 'ember';
const { getOwner, Service } = Ember;
export default Service.extend({
name: 'Test Service',
definitionFactory(definition) {
let baseDefinition = getOwner(this).lookup('object:definition');
return baseDefinition.create(definition);
}
});
<h1>Welcome to {{appName}}</h1>
<h2>{{object.name}}</h2>
<br>
<br>
{{outlet}}
<br>
<br>
{
"version": "0.12.1",
"EmberENV": {
"FEATURES": {}
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "2.12.0",
"ember-template-compiler": "2.12.0",
"ember-testing": "2.12.0"
},
"addons": {
"ember-data": "2.12.1"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment