Skip to content

Instantly share code, notes, and snippets.

@jelhan
Last active February 24, 2017 16:41
Show Gist options
  • Save jelhan/faf43bdb207b6594ddaecf7fd44cd936 to your computer and use it in GitHub Desktop.
Save jelhan/faf43bdb207b6594ddaecf7fd44cd936 to your computer and use it in GitHub Desktop.
ember-changeset
import Ember from 'ember';
const { computed, inject } = Ember;
export default Ember.Component.extend({
actions: {
cancel() {
this.get('model').rollback();
},
save() {
this.sendAction('save', this.get('model'));
}
},
availableProfessions: computed(function() {
return this.get('store').findAll('profession');
}),
store: inject.service()
});
import Ember from 'ember';
import PersonValidations from '../validations/person';
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
PersonValidations
});
export default function() {
this.resource('people');
this.resource('professions');
};
import { Model, belongsTo } from 'ember-cli-mirage';
export default Model.extend({
profession: belongsTo('profession')
});
import { Model, hasMany } from 'ember-cli-mirage';
export default Model.extend({
persons: hasMany('person')
});
export default function(server) {
let dentist = server.create('profession', {
name: 'dentist'
});
server.create('profession', { name: 'student' });
server.create('profession', { name: 'teacher' });
server.create('person', {
age: 28,
firstName: 'Max',
lastName: 'Mustermann',
profession: dentist
});
};
import Model from "ember-data/model";
import attr from "ember-data/attr";
import { belongsTo, hasMany } from "ember-data/relationships";
export default Model.extend({
age: attr('number'),
firstName: attr('string'),
lastName: attr('string'),
profession: belongsTo()
});
import Model from "ember-data/model";
import attr from "ember-data/attr";
import { belongsTo, hasMany } from "ember-data/relationships";
export default Model.extend({
name: attr('string'),
persons: hasMany('person')
});
import Ember from 'ember';
export default Ember.Route.extend({
actions: {
create(changeset) {
this.store.createRecord('person', changeset.get('change')).save();
},
save(changeset) {
changeset.save();
}
},
model() {
return this.store.findAll('person');
}
});
<h1>Welcome to {{appName}}</h1>
<table class="table">
<thead>
<tr>
<th>first name</th>
<th>last name</th>
<th>age</th>
<th>profession</th>
</tr>
</thead>
<tbody>
{{#each model as |person|}}
<tr>
<td>{{person.firstName}}</td>
<td>{{person.lastName}}</td>
<td>{{person.age}}</td>
<td>{{person.profession.name}}</td>
</tr>
{{/each}}
</tbody>
</table>
{{person-form model=(changeset model.firstObject PersonValidations) save=(route-action 'save')}}
{{person-form model=(changeset (hash ) PersonValidations) save=(route-action 'create') create=true}}
<div id="ember-basic-dropdown-wormhole"></div>
{{#bs-form model=model onSubmit=(action 'save') as |form|}}
{{form.element label='first name' property='firstName'}}
{{form.element label='last name' property='lastName'}}
{{form.element controlType='number' label='age' property='age'}}
{{#form.element property='profession' label='profession' as |value|}}
{{#power-select
options=availableProfessions
onchange=(action (mut model.profession))
selected=model.profession
as |option|
}}
{{option.name}}
{{/power-select}}
{{/form.element}}
{{#bs-button onClick=(action 'cancel')}}Cancel{{/bs-button}}
{{bs-button buttonType='submit' defaultText=(if create 'Create' 'Save')}}
{{/bs-form}}
{
"version": "0.11.0",
"EmberENV": {
"EXTEND_PROTOTYPES": {
"Date": false
},
"FEATURES": {}
},
"ENV": {
"ember-cli-mirage": {
"enabled": true
}
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "2.6.2",
"ember-data": "2.6.2",
"ember-template-compiler": "2.6.2",
"ember-testing": "2.6.2"
},
"addons": {
"ember-bootstrap": "1.0.0-alpha.4",
"ember-bootstrap-changeset-validations": "1.0.0-alpha",
"ember-changeset": "1.2.2",
"ember-changeset-validations": "1.2.5",
"ember-cli-mirage": "*",
"ember-power-select-with-create": "*",
"ember-route-action-helper": "2.0.2"
}
}
import {
validatePresence,
validateNumber
} from 'ember-changeset-validations/validators';
export default {
age: validateNumber({ gte: 18 }),
firstName: validatePresence(true),
lastName: validatePresence(true),
profession: validatePresence(true)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment