Ember CP Validations support for Ember Changeset
npm install ember-changeset-cp-validations




Ember CP Validations support for Ember Changeset
- ember-cp-validations v3.1.0 or above
- ember-changeset
```
ember install ember-changeset-cp-validations
- ### Changelog
This addon updates the changeset helper by creating a changeset instance via the createChangeset.
`hbs`
{{dummy-form
changeset=(changeset user)
submit=(action "submit")
rollback=(action "rollback")
}}
Passing a custom action as a second argument to the changeset helper is supported but makevalidate
sure to call the passed method to run the necessary validations.
`hbs`
{{dummy-form
changeset=(changeset user (action "customValidate"))
submit=(action "submit")
rollback=(action "rollback")
}}
`js
import Ember from 'ember';
const { Component } = Ember;
export default Component.extend({
actions: {
customValidate({ key, newValue, oldValue, changes }, validate) {
// do some custom stuff
return validate(...arguments);
}
}
});
`
There are 2 ways to create a changset programmatically.
#### Using createChangeset
createChangeset is a no fuss way of quickly creating a new changeset instance.
It will return a new changeset instance that is setup for the passed model and its validations.
`js
import Ember from 'ember';
import createChangeset from 'ember-changeset-cp-validations';
const { Component } = Ember;
export default Component.extend({
init() {
this._super(...arguments);
let model = get(this, 'model');
this.changeset = createChangeset(model);
}
});
`
#### Using buildChangeset
buildChangeset allows you more freedom with creating the changeset instance.validateFn
It will return a hash that includes the and validationMap required to
support the validations for the passed model.
`js
import Ember from 'ember';
import { buildChangeset } from 'ember-changeset-cp-validations';
const { Component } = Ember;
export default Component.extend({
init() {
this._super(...arguments);
let model = get(this, 'model');
let { validateFn, validationMap } = buildChangeset(model);
this.changeset = new Changeset(model, validateFn, validationMap);
}
});
`
When changes get applied to the actual model, validations will be re-triggered since the dependents of the CPs
have changed. As of ember-cp-validations __v3.1.0__, to disable this, you may put all or selective attribute CPs in a
volatile state via the volatile option.
`js
const Validations = buildValidations({
username: {
description: 'Username',
validators: [
validator('presence', true),
validator('length', {
min: 5,
max: 15
})
]
},
password: {
description: 'Password',
validators: [
validator('presence', true),
validator('length', {
min: 4,
max: 10,
volatile: false
})
]
}
}, {
volatile: true
});
``