Skip to content

Instantly share code, notes, and snippets.

@toranb
Last active January 5, 2017 20:34
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save toranb/6de171477a2527dd01dfc7857c8048c2 to your computer and use it in GitHub Desktop.
Save toranb/6de171477a2527dd01dfc7857c8048c2 to your computer and use it in GitHub Desktop.
MasterDetailYieldedEach
import Ember from 'ember';
import hbs from 'htmlbars-inline-precompile';
export default Ember.Component.extend({
layout: hbs`
{{yield}}
`
});
import Ember from "ember";
export default Ember.Helper.helper(function(params) {
return parseInt(params[0], 10) + 1;
});
import Ember from 'ember';
import route from 'ember-redux/route';
var model = (dispatch, options) => {
//why mirage no work here?
var response = {id: options.index, number: options.index};
return dispatch({type: 'TRANSFORM_DETAIL', response: response});
};
var DetailRoute = Ember.Route.extend({
renderTemplate: function(model, options){
var outletName = parseInt(options.response.id, 10).toString();
this.render('items/detail', {
'into': 'items',
'outlet': outletName
});
},
actions: {
willTransition: function() { this.disconnectOutlet(this.context.response.id);
}
}
});
export default route({model})(DetailRoute);
<p>the detail template {{model.response.id}}</p>
import fetch from 'fetch';
import route from 'ember-redux/route';
var model = (dispatch) => {
return fetch('/api/items').then(fetched => fetched.json()).then(response => dispatch({type: 'TRANSFORM_LIST', response: response}));
};
export default route({model})();
{{#my-results as |items|}}
{{#my-list items=items as |index|}}
{{outlet (plus-one index)}}
{{/my-list}}
{{/my-results}}
export default function() {
this.namespace = 'api';
this.get('/items', () => {
return {
items: [
{id: 1, name: 'one'},
{id: 2, name: 'two'},
{id: 3, name: 'three'}
]
};
});
this.get('/items/1', () => {
return {id: 1, name: 'one', number: 1};
});
this.get('/items/2', () => {
return {id: 1, name: 'two', number: 2};
});
this.get('/items/3', () => {
return {id: 1, name: 'three', number: 3};
});
}
import Ember from 'ember';
import hbs from 'htmlbars-inline-precompile';
export default Ember.Component.extend({
layout: hbs`
{{#each items as |item index|}}
<div>{{item.name}}</div>
{{#link-to "items.detail" (plus-one index)}}details{{/link-to}}
{{yield index}}
{{/each}}
`
});
import Ember from 'ember';
import hbs from 'htmlbars-inline-precompile';
import connect from 'ember-redux/components/connect';
var stateToComputed = (state) => {
return {
items: state.items.all
};
};
var MyResultsComponent = Ember.Component.extend({
layout: hbs`
{{yield items}}
`
});
export default connect(stateToComputed)(MyResultsComponent);
import items from './items';
export default {
items: items
};
const initialState = {
all: [],
selected: null
};
export default ((state, action) => {
if (action.type === 'TRANSFORM_LIST') {
return Object.assign({}, state, {
all: action.response.items
});
}
if (action.type === 'TRANSFORM_DETAIL') {
return Object.assign({}, state, {
selected: action.response.item
});
}
return state || initialState;
});
import Ember from 'ember';
import config from './config/environment';
const Router = Ember.Router.extend({
location: 'none',
rootURL: config.rootURL
});
Router.map(function() {
this.route('items', {path: '/'}, function() {
this.route('detail', {path: '/detail/:index'});
});
});
export default Router;
{{#app-layout}}
{{outlet}}
{{/app-layout}}
{
"version": "0.10.4",
"ENV": {
"ember-cli-mirage": {
"enabled": true,
"directory": "app/mirage"
}
},
"EmberENV": {
"FEATURES": {}
},
"options": {
"use_pods": true,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "2.6.2",
"ember-data": "2.7.0",
"ember-template-compiler": "2.6.2"
},
"addons": {
"ember-redux": "1.5.0",
"ember-fetch": "1.3.0",
"ember-cli-mirage": "0.2.1"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment