Skip to content

Instantly share code, notes, and snippets.

@istro
Last active August 29, 2015 14:00
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 istro/11384151 to your computer and use it in GitHub Desktop.
Save istro/11384151 to your computer and use it in GitHub Desktop.
Code for Ember post
// /app/adapters/application.js
export default DS.ActiveModelAdapter.extend({
host: 'trooper-json-api-host.com/',
namespace: 'api',
});
// app/controllers/foobar/avatar.js
export default Ember.ObjectController.extend({
avatarClass: function () {
return "sprite-" + this.get('avatar.name').dasherize();
}.property('avatar.name'),
});
// app/controllers/users/edit.js
export default Ember.ObjectController.extend({
isEditingUserName: false;
actions: {
showEditUsernameForm: function () {
this.toggleProperty('isEditingUserName');
},
save: function () {
this.toggleProperty('isEditingPostalCode');
// bubble action to route
return true;
}
}
})
// /Gruntfile.js
// task that is intended to be run by us
grunt.registerTask('server', "Run your server in development mode, auto-rebuilding when files change.", function(proxyMethod) {
...
grunt.task.run(['clean:debug',
'build:debug',
expressServerTask,
'watch'
]);
});
// task that is run as part of another task
grunt.registerTask('build:debug', filterAvailable([
'jshint:tooling',
'createResultDirectory', // Create directoy beforehand, fixes race condition
'fancySprites:create',
'concurrent:buildDebug', // Executed in parallel, see config below
]));
// app/models/jedi.js
export default DS.Model.extend({
weapon: DS.attr()
});
// app/models/base.js
export default DS.Model.extend({
name: DS.attr(),
kind: DS.attr(),
us: belongsTo('us'), // not specifying `async` as below forces Ember to fetch `us` right away. ALL YOUR BASE ARE BELONG TO US
battleships: hasMany('battleships', {async: true}),
});
// /package.json
...
"devDependencies": {
"express": "~3.4.2",
"lockfile": "~>0.3.0",
"bower": "~1.3.2",
"grunt": "~0.4.2",
"grunt-fancy-sprites": "~2.0.0",
...
// /app/routes/user/index.js
export default Ember.Route.extend({
// this is default model behaviour - that's what Ember assumes when model definition is omitted
model: function (params) {
return this.store.find('user', params.user_id)
}
// /app/routes/user/index.js
...
// default renderTemplate behaviour - that's what Ember assumes if it's omitted
// the path given is relative to app/templates/
renderTemplate: function () {
this.render('user/index')
}
...
// /app/routes/user/index.js
...
// default setupController behaviour - if omitted, this is what Ember assumes
setupController: function(controller, model) {
controller.set('model', model);
}
...
// /app/routes/users/new.js
actions {
save: function () {
// `this` refers to the route.
return this.currentModel.save();
}
}
...
// /app/routes/user.js
renderTemplate: function () {
// preserving default behaviour
this.render('user');
// render sidebar
this.render('super-special-partial', {
outlet: 'named-special-outlet'
});
}
...
});
var Router = Ember.Router.extend(); // ensure we don't share routes between all Router instances
Router.map(function() {
this.route('landing', { path: '/landing' });
this.resource('locations', function(){ // { path: 'locations' } omitted
this.route('new'); // { path: 'locations/new' } omitted
});
this.resource('location', { path: '/location/:location_id' });
});
export default Router;
// /app/adapters/storm-trooper.js
export default DS.FixtureAdapter;
// app/models/strorm-trooper.js
var StormTrooper = DS.Model.extend({
weapon: DS.attr()
});
StormTrooper.reopenClass({
FIXTURES: [{
id: 1,
weapon: "Blaster rifle",
}, {
id: 2,
name: "Samurai sword",
}, {
id: 3,
name: "Baton",
}]
});
export default StormTrooper;
{{! app/templates/super-special-partial.hbs }}
<div>
Some awesome reusable code
</div>
{{! app/templates/users/edit.hbs }}
...
<button {{action 'showEditUsernameForm'}}>Edit</button>
...
{{#if showEditUsernameForm}}
<form to edit username />
{{/if}}
...
{{! app/templates/users/index.hbs }}
<ul>
{{#each users itemController='foobar/avatar'}}
<li class='{{avatarClass}}'>{{name}}</li>
{{/each}}
...
{{! app/templates/user.hbs }}
<div>some code relevant for all user pages - sort of like a layout in rails</div>
{{outlet named-special-outlet}} <--- this is where we can render something extra from route's renderTemplate hook
<div> some more relevant content </div>
{{outlet}} <--- this is where the default views will render
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment