Skip to content

Instantly share code, notes, and snippets.

@ramybenaroya
Last active August 29, 2015 14:27
Show Gist options
  • Save ramybenaroya/bc2777124f8fd5591cc5 to your computer and use it in GitHub Desktop.
Save ramybenaroya/bc2777124f8fd5591cc5 to your computer and use it in GitHub Desktop.
New Twiddle
import DS from 'ember-data';
export default DS.FixtureAdapter.extend();
import Ember from 'ember';
const {
RSVP: {
Promise,
hash
},
run,
run: {
bind
},
inject: {
service
},
Route
} = Ember;
export default Route.extend({
session: service(),
model() {
var tagsPromise = new Promise((resolve, reject) => {
var currentUser = this.get('session.currentUser');
if (currentUser && currentUser.then){
currentUser
.then(bind(this, (user) => {
user
.get('tags')
.then(bind(null, resolve))
.catch(bind(null, reject));
}))
.catch(bind(null, reject));
} else {
run(null, reject);
}
});
var waterfallsPromise = new Promise((resolve, reject) => {
var currentUser = this.get('session.currentUser');
if (currentUser && currentUser.then){
currentUser
.then(bind(this, (user) => {
user
.get('waterfalls')
.then(bind(null, resolve))
.catch(bind(null, reject));
}))
.catch(bind(null, reject));
} else {
run(null, reject);
}
});
return hash({
tags: tagsPromise,
waterfalls: waterfallsPromise
});
}
});
import Ember from 'ember';
export default Ember.Controller.extend({
appName:'Ember Twiddle'
});
import DS from 'ember-data';
var Tag = DS.Model.extend({
name: DS.attr()
});
Tag.reopenClass({
FIXTURES: [{
id: 'tag-1',
name: 'Tag 1'
},{
id: 'tag-2',
name: 'Tag 2'
}]
});
export default Tag;
import DS from 'ember-data';
var User = DS.Model.extend({
tags: DS.hasMany('tag', {async: true}),
waterfalls: DS.hasMany('waterfall', {async: true})
});
User.reopenClass({
FIXTURES: [{
id: 'user-1',
tags: ['tag-1', 'tag-2'],
waterfalls: ['waterfall-1' , 'waterfall-2']
}]
});
export default User;
import DS from 'ember-data';
var Waterfall = DS.Model.extend({
name: DS.attr()
});
Waterfall.reopenClass({
FIXTURES: [{
id: 'waterfall-1',
name: 'Waterfall 1'
},{
id: 'waterfall-2',
name: 'Waterfall 2'
}]
});
export default Waterfall;
import Ember from 'ember';
import DS from 'ember-data';
const {
Service,
computed,
isEmpty,
inject: {
service
}
} = Ember;
export default Service.extend({
store: service(),
secure: {
user_id: 'user-1'
},
currentUser: computed('secure.user_id', function() {
var userId = this.get('secure.user_id');
if (!isEmpty(userId)) {
return DS.PromiseObject.create({
promise: this.get('store').find('user', userId)
});
}
})
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
<b>Tags:</b>
<ul>
{{#each model.tags as |tag|}}
<li>{{tag.name}}</li>
{{/each}}
</ul>
<br>
<b>Waterfalls</b>:
<ul>
{{#each model.waterfalls as |waterfall|}}
<li>{{waterfall.name}}</li>
{{/each}}
</ul>
{{outlet}}
{
"version": "0.4.8",
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/1.13.8/ember.js",
"ember-data": "https://cdnjs.cloudflare.com/ajax/libs/ember-data.js/1.13.9/ember-data.js",
"ember-template-compiler": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/1.13.8/ember-template-compiler.js"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment