Skip to content

Instantly share code, notes, and snippets.

@visoft
Last active May 1, 2020 23:33
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 visoft/0d0a0f211c818a5300b4deaac7e159d6 to your computer and use it in GitHub Desktop.
Save visoft/0d0a0f211c818a5300b4deaac7e159d6 to your computer and use it in GitHub Desktop.
Bootstrap Changeset Form
import Controller from '@ember/controller';
import { tracked } from '@glimmer/tracking';
import { Changeset } from 'ember-changeset';
import { action } from '@ember/object';
import FormValidator from '../validators/form';
import lookupValidator from 'ember-changeset-validations';
export default class ApplicationController extends Controller {
@tracked formModel = { name: null, foo: null };
constructor() {
super(...arguments);
this.changeset = Changeset(this.formModel, lookupValidator(FormValidator), FormValidator);
}
@action
async saveForm(changeset) {
await changeset.validate();
}
}
<p>Changeset is valid? {{this.changeset.isValid}}</p>
<h2>Errors</h2>
<ul>
{{#each-in this.changeset.error as |property error|}}
<li>
{{property}}:
{{#each error.validation as |message|}}
{{message}}<br/>
{{/each}}
</li>
{{else}}
No errors
{{/each-in}}
</ul>
<BsForm @model={{this.changeset}} @onSubmit={{this.saveForm}} as |Form|>
<Form.element @controlType="text" @property="name" as |el|>
<el.control placeholder="Name" autofocus="true"/>
</Form.element>
<Form.element @controlType="text" @property="foo" as |el|>
<el.control placeholder="Foo" />
</Form.element>
<BsButton @defaultText="Submit" @type="primary" @buttonType="submit" />
</BsForm>
{
"version": "0.17.0",
"EmberENV": {
"FEATURES": {},
"_TEMPLATE_ONLY_GLIMMER_COMPONENTS": true,
"_APPLICATION_TEMPLATE_WRAPPER": false,
"_JQUERY_INTEGRATION": false
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"ember": "3.17.0",
"ember-template-compiler": "3.17.0",
"ember-testing": "3.17.0"
},
"addons": {
"@glimmer/component": "1.0.0",
"ember-bootstrap": "3.1.3",
"ember-bootstrap-changeset-validations": "3.0.0",
"ember-changeset": "3.3.1",
"ember-changeset-validations": "3.3.1"
}
}
import { validatePresence, validateLength } from 'ember-changeset-validations/validators';
export default {
name: [validatePresence(true), validateLength({ min: 4 })],
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment