Hello everyone,
This library is amazing! Unfortunately, and maybe I'm doing something horrible here, I'm unable to make this work with an Ember.Object. I keep getting an error from validations-factory.js:288 that reads: "Uncaught TypeError: <(unknown mixin):ember490> is missing a container.
Now, I will admit, I'm trying to maybe be too clever with this, but even when I tighten up the following code to JUST be the buildValidations output I still get the error. I apologize for all the code in here, I know its a lot to read, but I didn't know how else to communicate my issue.
I'm using the following code (I wanted to provide an Ember Twiddle but I couldn't figure out how to put an addon in there):
app/mixins/lazierValidationMixin.js
import Ember from 'ember';
var computed = Ember.computed;
export default Ember.Mixin.create({
displayValidation: false,
vattrs: computed.alias('validations.attrs'),
vattrsAreValid: computed.and('validations.isValid', 'displayValidation'),
vattrsAreInvalid: computed.and('validations.isInvalid', 'displayValidation')
});
app/pods/login/loginValidations.js
import Ember from 'ember';
import { validator, buildValidations } from 'ember-cp-validations';
import lazierValidations from 'cookbook/mixins/lazierValidationMixin';
var validations = buildValidations({
username: validator('presence', true),
password: validator('presence', true)
}).reopen(lazierValidations);
var computed = Ember.computed;
export default validations.reopen({
invalidUsername: computed.and('displayValidation', 'validations.attrs.username.isInvalid'),
invalidPassword: computed.and('displayValidation', 'validations.attrs.password.isInvalid')
});
app/pods/login/model.js
import Ember from 'ember';
import validations from './loginValidations';
export default Ember.Object.extend(validations, {
username: null,
password: null
});
Note that if I do this on a controller, this works just fine. Here's a sample controller and template (using Foundation but whatever). When I try to return my above model from a route with model.create() and then change all the below bindings to prefix 'model.whatever' it doesn't work.
app/pods/login/controller.js
import Ember from 'ember';
import validations from './loginValidations';
var { get, set } = Ember;
export default Ember.Controller.extend(validations, {
actions: {
submitLogin() {
if (get(this, 'validations.isValid')) {
alert("Go!");
}
else {
set(this, 'displayValidation', true);
}
}
}
});
app/pods/login/template.hbs
<h1>Login</h1>
<form>
<div class="form-item">
<label for='username'>Username</label>
{{input type='text' id='username' value=username class=(ifinvalidUsername 'invalid')}}
<span class='validation-error'>{{vattrs.username.message}}</span>
</div>
<div class="form-item">
<label for='password'>Password</label>
{{input type='password' id='password' value=password class=(ifinvalidPassword 'invalid')}}
<span class='validation-error'>{{vattrs.password.message}}</span>
</div>
<button type="button" {{action 'submitLogin'}} disabled={{vattrsAreInvalid}}>Login</button>
</form>