1

我正在尝试使用 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 页面中的示例非常相似:

https://github.com/offirgolan/ember-cp-validations/blob/7433fdb2ce7d22f956ca97a9b3291fe9c6637446/tests/dummy/app/controllers/index.js

我还确保在我的模型文件中导入和定义所有必要的信息。我使它看起来与他们的示例完全相同:

https://github.com/offirgolan/ember-cp-validations/blob/7433fdb2ce7d22f956ca97a9b3291fe9c6637446/tests/dummy/app/models/user.js

但是,当我运行该操作时,我收到错误 model.validate is not a function。我不明白为什么在他们的示例中他们能够在他们的模型上运行验证,但我无法在我的模型上运行。我越想解决这个问题,我就越困惑。

4

0 回答 0