我正在尝试使用 ember-cp-validations 验证表单中的输入。实际验证本身似乎正在工作,但是我无法在模板上显示错误消息。一般来说,我对 ember 还很陌生,我假设我没有正确使用 v-get 助手中的模型。
这是我的模型:
import DS from 'ember-data';
import { validator, buildValidations } from 'ember-cp-validations';
const Validations = buildValidations({
name: validator('presence', true),
})
export default DS.Model.extend(Validations, {
name: DS.attr('string'),
});
这是提交表单时我在控制器中运行的操作:
//tried to get character model here to make validation work
let character = this.get('model');
//create new character record to store
let newCharacter = this.store.createRecord('character', {
name: name,
});
//validating here
newCharacter.validate()
.then( ({validations}) => {
console.log(validations)
if(validations.get('isValid')) {
console.log('form is valid')
//record will be saved here
}else{
console.log('form is invalid')
}
})
在此操作中,当名称字段为空时,它确实表示表单按预期无效。
最后,我尝试在这里显示错误:
{{input type="text" class="form-control" value=name placeholder="Character Name" focus-out=(action (mut showNameError) true)}}
{{#if showNameError}}
<div class="error">
{{v-get character 'name' 'message'}}
</div>
{{/if}}
当您失去对该字段的关注时,会在此处创建 div,但该消息永远不会显示。据我了解,这里帮助器的参数应该是模型、您正在验证的字段,然后是要显示的消息。它知道表单无效,但消息从未显示的事实使我相信我误解了某些内容,并且实际上没有在 v-get 帮助程序中正确访问字符模型。
在阅读并观看了一些关于 ember-cp-validations 的教程之后,我似乎仍然被卡住了。任何帮助,将不胜感激。
提前致谢!
编辑:在尝试了几个小时来解决这个问题后,我想添加更多信息。我在控制器中创建了一个新操作,与位于此处的 ember-cp-validations github 页面中的示例非常相似:
我还确保在我的模型文件中导入和定义所有必要的信息。我使它看起来与他们的示例完全相同:
但是,当我运行该操作时,我收到错误 model.validate is not a function。我不明白为什么在他们的示例中他们能够在他们的模型上运行验证,但我无法在我的模型上运行。我越想解决这个问题,我就越困惑。