Skip to content

Instantly share code, notes, and snippets.

@arenoir
Last active October 16, 2015 03:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arenoir/c5036b3b2c86372aed8a to your computer and use it in GitHub Desktop.
Save arenoir/c5036b3b2c86372aed8a to your computer and use it in GitHub Desktop.
New Twiddle
import Ember from 'ember';
const {A, computed, isEmpty} = Ember;
export default Ember.Controller.extend({
appName:'Ember Twiddle',
length: 1000,
list: null,
actions: {
regenerate() {
this.transitionToRoute('lists.show', 1);
}
}
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
<button {{action "regenerate"}}>
Start
</button>
{{outlet}}
<br>
<br>
import Ember from 'ember';
const {computed} = Ember;
export default Ember.Controller.extend({
nextId: 2,
lists: [],
next: computed('lists.[]', 'model', function() {
let lists = this.get('lists');
let model = this.get('model');
let index = lists.indexOf(model);
if (index >= 0) {
return lists.objectAt(index + 1) || parseInt(model.get('id')) + 1;
}
return 2;
}),
prev: computed('lists.[]', 'model', function() {
let lists = this.get('lists');
let model = this.get('model');
let index = lists.indexOf(model);
if (index > 0) {
return lists.objectAt(index -1) || parseInt(model.get('id')) - 1;
}
return 1;
}),
push(model) {
let lists = this.get('lists');
lists.pushObject(model);
}
});
import Ember from 'ember';
export default Ember.Route.extend({
model(params) {
let list = this.store.createRecord('list', {id: params.id});
list.buildItems();
return list;
},
setupController(ctlr, model) {
ctlr.push(model);
ctlr.set('model', model);
ctlr.set('nextId', model.get('id') + 1);
}
});
<h2>My List</h2>
{{my-list list=model}}
{{#link-to 'lists.show' prev}}
prev
{{/link-to}}
{{#link-to 'lists.show' next}}
next
{{/link-to}}
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
cost: DS.attr('number'),
list: DS.belongsTo('list')
});
import Ember from 'ember';
import DS from 'ember-data';
const {hasMany} = DS;
const {RSVP, computed, isEmpty} = Ember;
export default DS.Model.extend({
items: hasMany('item'),
itemsCost: computed('items.@each.cost', function() {
var items = this.get('items');
if (isEmpty(items)) {
return 0;
}
return items.reduce(function(value, item) {
value += item.get('cost') || 0;
return value;
}, 0);
}),
buildItems() {
let store = this.store;
let items = this.get('items');
return new RSVP.Promise((resolve, reject) => {
for(var i = 0; i < 1000; i++) {
let item = store.createRecord('item', {
name: 'name-' + Math.random().toString(),
cost: Math.random()
});
items.pushObject(item);
}
resolve(items);
});
}
});
import Ember from 'ember';
const {computed} = Ember;
export default Ember.Component.extend({
sort: ['cost:asc'],
sorted: computed.alias('list.items', 'sort'),
cost: computed.alias('list.itemsCost')
});
import Ember from 'ember';
export default Ember.Component.extend({
});
{{item.name}} @ {{item.cost}}
<h2>
{{cost}}
</h2>
<div style="height: 100px; overflow:auto;">
{{#each sorted as |item|}}
{{my-list/my-item item=item}}
{{/each}}
</div>
<h2>
{{cost}}
</h2>
import Ember from 'ember';
import config from './config/environment';
var Router = Ember.Router.extend({
location: config.locationType
});
Router.map(function() {
this.route('lists', function() {
this.route('show', {path: ":id"});
});
});
export default Router;
{
"version": "0.4.13",
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/2.1.0/ember.debug.js",
"ember-data": "https://cdnjs.cloudflare.com/ajax/libs/ember-data.js/2.1.0/ember-data.js",
"ember-template-compiler": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/2.1.0/ember-template-compiler.js"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment