Skip to content

Instantly share code, notes, and snippets.

@chadhietala
Created March 14, 2019 21:08
Show Gist options
  • Save chadhietala/ba4664598668e2c70e842eb8a0f40cda to your computer and use it in GitHub Desktop.
Save chadhietala/ba4664598668e2c70e842eb8a0f40cda to your computer and use it in GitHub Desktop.
New Twiddle
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
});
import EmberRouter from '@ember/routing/router';
import config from './config/environment';
const Router = EmberRouter.extend({
location: 'none',
rootURL: config.rootURL
});
Router.map(function() {
this.route('parent', function() {
this.route('child');
});
});
export default Router;
import Ember from 'ember';
import { lix } from '../utils/lix';
export default Ember.Route.extend({
lix: lix(['a']),
appName: 'Ember Twiddle',
init() {
this._super(...arguments);
console.log(this.lix.treatment('a'));
},
});
import Ember from 'ember';
import { lix } from '../utils/lix';
export default Ember.Route.extend({
lix: lix(['a']),
appName: 'Ember Twiddle',
init() {
this._super(...arguments);
console.log(this.lix.treatment('a'));
},
});
import Ember from 'ember';
import { lix } from '../../utils/lix';
export default Ember.Route.extend({
lix: lix(['b']),
appName: 'Ember Twiddle',
init() {
this._super(...arguments);
console.log(this.lix.treatment('a'));
},
});
import Ember from 'ember';
import { lix } from '../utils/lix';
export default Ember.Route.extend({
lix: lix(['a', 'b']),
appName: 'Ember Twiddle',
init() {
this._super(...arguments);
console.log(this.lix.treatment('a'));
console.log(this.lix.treatment('b'));
},
});
import Ember from 'ember';
const routeToKeys = new WeakMap();
export default Ember.Service.extend({
init() {
this._super(...arguments);
this.out = new Map();
this._lixes = {
a: true,
b: false,
foo: 'bar'
};
setInterval(() => {
this.set('_lixes', {
a: !this._lixes.a,
b: !this._lixes.b,
foo: !this._lixes.a ? 'foo' : 'bar'
})
}, 1000)
},
isConsumed(key) {
return this.out.has(key)
},
createSnapShotForRoute(route) {
let lix = this;
return new class {
treatment(key) {
let keys = routeToKeys.get(route);
if (lix.isConsumed(key)) {
console.log('consumed')
return lix.out.get(key);
}
if (keys.indexOf(key) > -1) {
let value = lix._lixes[key];
lix.out.set(key, value);
return value;
} else {
throw new Error(`Lix Key was not defined in the ${route.name} route`);
}
}
}
},
register(route, keys) {
routeToKeys.set(route, keys);
let snapshot = this.createSnapShotForRoute(route);
route.on('deactivate', () => {
keys.forEach(key => {
if (this.out.has(key)) {
this.out.delete(key);
}
})
});
return snapshot;
},
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
{{outlet}}
{{#link-to 'parent.child'}}To Child{{/link-to}}
<br>
<br>
<h1>Parent</h1>
{{outlet}}
{
"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"
}
}
import { defineProperty, computed } from '@ember/object';
export function lix(keys) {
return computed({
get(key) {
let service = Ember.getOwner(this).lookup('service:lix');
let snapshot = service.register(this, keys);
return snapshot
}
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment