我使用的是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
的输入上的内容)并且有时会验证当我在表单上更改不同的控件时。
答案 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