Skip to content

Instantly share code, notes, and snippets.

@asvny
Created August 31, 2017 02:43
Show Gist options
  • Save asvny/8630f3815f3e6a8f5efcb40a606ee3a3 to your computer and use it in GitHub Desktop.
Save asvny/8630f3815f3e6a8f5efcb40a606ee3a3 to your computer and use it in GitHub Desktop.
New Twiddle
import Ember from 'ember';
const { Logger: { assert } , tryInvoke } = Ember;
const PromiseProxy = Ember.Object.extend(Ember.PromiseProxyMixin);
const isPromise = (p) => typeof p === 'object' && p !== null && typeof p.then === 'function';
export default Ember.Component.extend({
tagName: 'button',
promise: null,
state: Ember.computed('promise', function(){
const promise = this.get('promise');
if(isPromise(promise)) {
return PromiseProxy.create({ promise })
}
}),
click() {
const returnVal = tryInvoke(this, 'action');
if(isPromise(returnVal)) {
this.set('promise', returnVal);
}
}
});
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
actions:{
async() {
return new Promise((res) => {
setTimeout(res, 3000);
})
},
failAsync() {
return new Promise((res,rej) => {
setTimeout(rej, 3000);
})
},
simple() {
return 123;
}
}
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
{{outlet}}
<br>
<br>
{{#ui-btn action=(action 'simple') }}
Simple button
{{/ui-btn}}
{{#ui-btn action=(action 'async') }}
Promise button
{{/ui-btn}}
{{#ui-btn action=(action 'failAsync') }}
Failure Promise button
{{/ui-btn}}
{{yield}}
{{#if state.isPending}}
{{/if}}
{{#if state.isRejected}}
{{/if}}
{{#if state.isFulfilled}}
{{/if}}
{
"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