Ember验证太迟了

时间:2016-09-09 13:43:11

标签: validation ember.js

我使用的是Ember 1.7并且有一个模型可以验证它。

使用输入助手,我将动作绑定到on="key-press"触发器。

在触发的动作中(在我的控制器内)我正在调用this.get('myModalInstance').validate()并且我设置了传递和失败的处理程序。

奇怪的是,验证似乎与我输入的先前值相关。

因此,当我输入numericality: { greaterThan: 0, lessThanOrEqualTo: 90 }时,如果我的验证显示为9,则验证正常,当我输入91时,它会验证确定,当我输入911时验证失败。

就我所见,这似乎是一个关键的按键太迟了。这是一个已知/常见的问题吗?是否有避免此问题的提示?

修改 我应该补充一点,我还尝试将我的验证失败css类绑定到这样的字段的errors对象:

{{input value=myValue classBinding=":form-input myValue.errors:validation-failure"}}

显示奇怪的行为(例如有时根本不应用该类,有时在我期待时应用它(例如删除已设置presence: true的输入上的内容)并且有时会验证当我在表单上更改不同的控件时。

1 个答案:

答案 0 :(得分:2)

如果您想要在更新时验证某些值(或很少),则不需要按键事件。使用observer(阅读&#34;观察者和异步&#34;部分,它非常重要,并说明如何避免这种滞后):改变您感兴趣的字段并进行验证。< / p>

或者,如果你想使用jquery验证插件之一,你可以创建一个component,例如调用它验证形式,并使用jquery插件进行验证。这些插件通常可以处理所有需要的事件。此类组件的简单版本(应与this插件一起使用):

import Ember from 'ember';

export default Ember.Component.extend({
    tagName: 'form',
    onSubmit: null,
    validationRules: {},
    validationMessages: {},
    didInsertElement() {
        const form = this.$();
        form.validate({
            submitHandler: () => {
                if (this.get('onSubmit')) {
                    this.sendAction('onSubmit');
                }
            },
            rules: this.get('validationRules'),
            messages: this.get('validationMessages')
        });
    }
});

在模板中,您可以像这样使用它:

{{#validated-form validationRules=validationRules}}
    Form fields here
{{/validated-form}}

如果您对解决方案无法解决的原因感兴趣,我相信这是因为ember的输入组件使用input事件来更新绑定值,{{1在input

之后触发了事件