gpt4 book ai didi

validation - Ember 验证触发太晚了

转载 作者:行者123 更新时间:2023-12-04 15:41:34 26 4
gpt4 key购买 nike

我正在使用 Ember 1.7 并且有一个带有验证的模型。

使用输入助手,我将一个 Action 绑定(bind)到 on="key-press"扳机。

在触发的 Action 中(在我的 Controller 内),我正在调用 this.get('myModalInstance').validate()我为通过和失败设置了处理程序。

奇怪的是,验证似乎与我输入的先前值一起触发。

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

据我所知,这似乎是一个按键为时已晚。这是一个已知/常见问题吗?是否有避免此问题的提示?

编辑
我应该补充一点,我还尝试将我的验证失败 css 类绑定(bind)到错误对象的字段,如下所示:

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

哪个显示奇怪的行为(例如有时根本不应用该类,有时在我期望时应用它(例如删除设置了 presence: true 的输入上的内容),有时在我更改不同的控件时进行验证表格。

最佳答案

如果您想在更新时验证某个(或少数)值,则不需要按键事件。使用observer (彻底阅读“观察者和异步”部分,这非常重要,并展示了如何避免这种滞后)相反:观察您感兴趣的字段的变化并验证。

或者,如果您想使用其中一个 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更新绑定(bind)值的事件,以及 inputkeypress 之后触发事件

关于validation - Ember 验证触发太晚了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39412978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com