dou*_*ald 6 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"}}
Run Code Online (Sandbox Code Playgroud)
这显示了奇怪的行为(例如有时根本不应用该类,有时在我期待时应用它(例如删除已presence: true设置的输入上的内容),有时在我更改表单上的不同控件时进行验证.
如果您想在更新时验证某些值(或几个值),则不需要按键事件。使用观察者(彻底阅读“观察者和异步”部分,这非常重要,并展示了如何避免此类滞后):观察您感兴趣的字段的更改并进行验证。
或者,如果您想使用其中一个 jquery 验证插件,您可以创建一个组件,例如将其命名为 valided-form,然后使用 jquery 插件进行验证。这些插件通常自行处理所有需要的事件。此类组件的简单版本(应与此插件一起使用):
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')
});
}
});
Run Code Online (Sandbox Code Playgroud)
在模板中,您可以像这样使用它:
{{#validated-form validationRules=validationRules}}
Form fields here
{{/validated-form}}
Run Code Online (Sandbox Code Playgroud)
如果您对解决方案不起作用的原因感兴趣,我相信那是因为 ember 的输入组件使用input事件来更新绑定值,并且input事件在之后被触发keypress
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |