Skip to content

Instantly share code, notes, and snippets.

@krukid
Created November 11, 2020 14:39
Show Gist options
  • Save krukid/6d2f981f6628a3260db8cafd3b3aac0a to your computer and use it in GitHub Desktop.
Save krukid/6d2f981f6628a3260db8cafd3b3aac0a to your computer and use it in GitHub Desktop.
ember-flopping-route-demo
import Controller from '@ember/controller';
export default class ApplicationController extends Controller {
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('flopping-route', {path: 'flopping-route/:seg'})
});
export default Router;
import Route from '@ember/routing/route';
export default Route.extend({
actions: {
async retry() {
try {
const appController = this.controllerFor('application')
await appController.failedTransition.retry()
appController.set('failedTransition', null)
}
catch (e) {
console.log(e)
alert(`retry error: ${e.message}`)
}
},
},
});
import Route from '@ember/routing/route';
export default Route.extend({
actions: {
error(error, transition) {
const appController = this.controllerFor('application');
appController.set('failedTransition', transition);
return true;
},
},
});
import Route from '@ember/routing/route';
export default Route.extend({
model({seg}) {
console.log('*** loading model', seg)
if (Math.random() > 0.5) {
throw new Error('route flopped');
}
return 'Route has not flopped yet'
},
actions: {
onRefreshClick() {
this.refresh()
},
},
});
<h3>ERROR: {{model.message}}</h3>
<button {{action "retry"}}>Retry</button>
OR {{link-to "Go Home" "index"}}
<h1>Welcome to {{this.appName}}</h1>
{{link-to "Home" "index"}} /
{{link-to "Flopping route" "flopping-route" "my-seg"}}
<br>
<br>
{{outlet}}
<br>
<br>
<h3>FLOPPING ROUTE</h3>
Hello, {{model}}
<br>
<br>
<button {{action "onRefreshClick"}}>Refresh</button>
<h3>HOME PAGE</h3>
Switching between "Home" and "Flopping route" pages and clicking "retry" on flopped route will work.
<br>
<br>
Going to "Flopping route" and pressing "refresh" when it's not flopping will break any following "retry".
<br>
<br>
{
"version": "0.17.1",
"EmberENV": {
"FEATURES": {},
"_TEMPLATE_ONLY_GLIMMER_COMPONENTS": false,
"_APPLICATION_TEMPLATE_WRAPPER": true,
"_JQUERY_INTEGRATION": true
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js",
"ember": "3.18.1",
"ember-template-compiler": "3.18.1",
"ember-testing": "3.18.1"
},
"addons": {
"@glimmer/component": "1.0.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment