Skip to content

Instantly share code, notes, and snippets.

@n1ru4l
Last active September 21, 2017 18:08
Show Gist options
  • Save n1ru4l/1d7f24655ff1d2fd83e3b983601902e1 to your computer and use it in GitHub Desktop.
Save n1ru4l/1d7f24655ff1d2fd83e3b983601902e1 to your computer and use it in GitHub Desktop.
New Twiddle
import Ember from 'ember'
const { Component } = Ember
export default Component.extend({
// properties
options: undefined,
selectedOption: undefined,
onChange: undefined,
})
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle'
});
import Ember from 'ember'
const { Controller } = Ember
export default Controller.extend({
actions: {
changeDoggoBreed(doggoBreed) {
this.transitionToRoute(`index.detail`, doggoBreed)
}
},
})
import Ember from 'ember';
export function isEqual([a, b]/*, hash*/) {
return a === b;
}
export default Ember.Helper.helper(isEqual);
import Ember from 'ember';
import config from './config/environment';
const Router = Ember.Router.extend({
location: 'none',
rootURL: config.rootURL
})
Router.map(function() {
this.route(`index`, { path: `/` }, function () {
this.route(`overview`, { path: `/` })
this.route(`detail`, { path: `/:breed` })
})
})
export default Router
import Ember from 'ember';
const { Route, get } = Ember
export default Route.extend({
ajax: Ember.inject.service(),
model({ breed }) {
const ajax = get(this, `ajax`)
return Ember.RSVP.hash({
doggoBreeds: this.modelFor(`index`),
doggoBreed: breed,
doggoBreedPic: ajax.request(
`https://dog.ceo/api/breed/${breed}/images/random`,
).then(result => result.message)
})
},
})
import Ember from 'ember'
const { Route, get, A: EmberArray } = Ember
export default Route.extend({
ajax: Ember.inject.service(),
model() {
return get(this, `ajax`)
.request(`https://dog.ceo/api/breeds/list`)
.then(result => EmberArray(result.message))
},
})
import Ember from 'ember';
const { Route, get } = Ember
export default Route.extend({
ajax: Ember.inject.service(),
model() {
return this.modelFor(`index`) // use model of the parent route
}
});
<h1>Welcome to the doggo demo</h1>
<br>
<br>
{{outlet}}
<br>
<br>
<select
onchange={{action onChange value="target.value"}}
>
{{#each options as |option|}}
<option
value={{option}}
selected={{is-equal selectedOption option}}
>
{{option}}
</option>
{{/each}}
</select>
{{yield}}
This is the detail template. The current doggo race is {{model.doggoBreed}}.
<br>
<br>
<br>
{{#link-to "index"}}Go back{{/link-to}}
<br>
<br>
We also have all doggo breeds here for quick navigation :)
{{lq-select
options=model.doggoBreeds
selectedOption=model.doggoBreed
onChange=(action "changeDoggoBreed")
}}
<br>
This is a picture of that doggo <br><img src={{model.doggoBreedPic}}>
This is the index route template. The index route fetches the doggo races.<br>
Yuu no trust me? This is the first doggo breed: {{model.firstObject}}
<br>
<br>
{{outlet}}
This is the overview template. It uses the model of the parent route (index) via this.modelFor('index').
<br> Here is a list of doggo breeds:
<br>
<ul>
{{#each model as |doggoBreed|}}
<li>
{{#link-to "index.detail" doggoBreed}}
{{doggoBreed}}
{{/link-to}}
</li>
{{/each}}
</ul>
{
"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-ajax": "3.0.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment