我正在尝试使用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页面中的示例极为相似:
我还确保要导入并定义模型文件中的所有必要信息。我使它看起来完全像他们的示例:
但是,当我执行操作时,出现错误模型。validate不是一个函数。我不明白为什么在他们的示例中他们将能够在其模型上运行验证,但是我无法在我的模型上运行。我越努力解决这个问题,我就越困惑。