Skip to content

Instantly share code, notes, and snippets.

@knownasilya
Last active April 7, 2016 18:33
Show Gist options
  • Save knownasilya/79480ed71a07db8ef4b5d5576e2a3d32 to your computer and use it in GitHub Desktop.
Save knownasilya/79480ed71a07db8ef4b5d5576e2a3d32 to your computer and use it in GitHub Desktop.
QP Service
import Ember from 'ember';
export default Ember.Controller.extend({
paramsService: Ember.inject.service('params'),
appName: 'Ember Twiddle',
queryParams: ['theme', { isSidebar: 'sidebar' }],
theme: 'bye',
isSidebar: false,
counter: 0,
init() {
this._super(...arguments);
var paramsService = this.get('paramsService');
//paramsService.subscribe('theme', (key, theme) => this.set('theme', theme));
paramsService.subscribeAll(this);
paramsService.subscribe('theme', (key, theme) => this.set('theme2', theme+2));
},
actions: {
updateTheme() {
var paramsService = this.get('paramsService');
var counter = this.incrementProperty('counter');
paramsService.setParam('theme', `hi${counter}`);
paramsService.setParam('isSidebar', counter % 2 === 1);
}
}
});
import Ember from 'ember';
const map = new Map();
export default Ember.Service.extend({
setParam(name, value) {
if (map.has(name)) {
map.get(name).value = value;
this.callCbs(name);
} else {
map.set(name, {
value,
cbs: []
});
}
},
getParam(name) {
var item = map.get(name);
return item ? item.value : undefined;
},
subscribe(name, cb) {
if (map.has(name)) {
let item = map.get(name);
item.cbs.push(cb);
} else {
map.set(name, {
value: undefined,
cbs: [cb]
});
}
},
subscribeAll(context) {
if (!context || !context.queryParams) {
return;
}
let keys = context.queryParams.reduce((all, item) => {
if (typeof item === 'string') {
all.push(item);
} else if (typeof item === 'object') {
all = all.concat(Object.keys(item));
}
return all;
}, []);
let update = (name, val) => { Ember.run(context, 'set', name, val); }
keys.forEach(key => this.subscribe(key, update));
},
callCbs(name) {
if (map.has(name)) {
let item = map.get(name);
item.cbs.forEach(cb => cb(name, item.value));
}
}
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
{{outlet}}
<br>
<br>
<button type="button" {{action 'updateTheme'}}>Test</button><br>
{{theme}}<br/>
{{theme2}}<br/>
{{isSidebar}}
{
"version": "0.7.2",
"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.4.4",
"ember-data": "https://cdnjs.cloudflare.com/ajax/libs/ember-data.js/2.4.3/ember-data.js",
"ember-template-compiler": "2.4.4"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment