Skip to content

Instantly share code, notes, and snippets.

View vincentbello's full-sized avatar

Vince Bello vincentbello

  • New York, NY
View GitHub Profile
@vincentbello
vincentbello / components.item-list.js
Last active September 20, 2017 16:53
Notifying children of object property changes
import Ember from 'ember';
export default Ember.Component.extend({
items: ['hello', 'world'],
displayedItems: Ember.computed('visibilityMap', 'items', function () {
const visibilityMap = this.get('visibilityMap');
const items = this.get('items');
return items.filter(item => {
@vincentbello
vincentbello / evolution-of-asynchrony.js
Created October 12, 2016 05:21
Callback functions -> promises -> generator functions
// Callback functions
function fetchData() {
this.fetch('data', (data) => {
this.updateUI();
});
}
// Promises
function fetchData() {
this.fetch('data')
@vincentbello
vincentbello / product-list.hbs
Created October 10, 2016 00:03
templates/product-list.hbs
{{#each model as |product|}}
{{#if product.taskInstance.isRunning}}
Loading data for {{product.name}}...
{{else if product.taskInstance.error}}
An error occurred: {{product.taskInstance.error}}
{{else if product.taskInstance.value}}
{{product-panel data=product.taskInstance.value}}
{{/if}}
{{/each}}
@vincentbello
vincentbello / product-list.js
Last active December 14, 2016 18:43
routes/product-list.js
export default Ember.Route.extend({
/** Use the url params to fetch the model data */
model(params) {
if (!Ember.isEmpty(params.products)) {
return params.products.map((product) => {
return {
name: product,
taskInstance: this.get('findProductTask').perform(product),
};
});
@vincentbello
vincentbello / product.hbs
Last active December 14, 2016 18:43
templates/product.hbs
{{#if model.taskInstance.isRunning}}
Loading data...
{{else if model.taskInstance.error}}
An error occurred.
{{else if model.taskInstance.value}}
<header>
{{model.taskInstance.value.productName}}
</header>
...
{{/if}}
@vincentbello
vincentbello / product-overview.js
Created October 8, 2016 20:28
products/product-overview.js
import Ember from 'ember';
import { task, timeout } from 'ember-concurrency';
export default Ember.Component.extend({
// Periodically refresh product info on init
_reloadDataTask: task(function * () {
while (true) {
yield timeout(30 * 1000); // Wait 30 seconds
if (this.get('product')) {
@vincentbello
vincentbello / product-overview.js
Created October 8, 2016 19:44
components/product-overview.js
// components/product-overview.js
import Ember from 'ember';
export default Ember.Component.extend({
timer: Ember.inject.service(),
// Periodically refresh product info
init() {
this.get('timer').start(() => {
@vincentbello
vincentbello / timer.js
Created October 8, 2016 19:43
app/services/timer.js
// General purpose timer service
import Ember from 'ember';
export default Ember.Service.extend({
interval: 5000,
// Schedules function `f` to be executed on interval
schedule(f, interval) {
const time = interval || this.get('interval');
return Ember.run.later(this, function() {