3

我正在使用 Backbone-Forms 并创建了一个具有以下架构的模型:

  schema:
    title:
      type: "Text"
      validators: ["required"]
    description: 
      type: "TextArea"
      validators: ["required"]
    location:
      type: "Text"
      validators: ["required"]

当我尝试提交带有空字段的表单时,验证正确发生并且它们都收到错误类。

但是,当我随后更新输入以包含内容时,错误类不会从我的输入中删除,直到我再次尝试提交表单。同样,如果我最初输入了一个有效的输入,然后删除了所有内容,它不会通知我错误,直到我尝试再次提交表单,而我想立即知道。

有没有办法在修改后的输入字段上触发验证?

4

2 回答 2

0

从文档:http ://backbonejs.org/#Model-validate :

isValidmodel.isValid()

如果您默默地更改模型,模型可能会进入无效状态......在处理表单输入时很有用。model.isValid()根据您的 validate 函数调用以检查模型当前是否处于有效状态。

也来自https://github.com/thedersen/backbone.validation#what-gets-validated-when

什么时候得到验证?

如果您使用 Backbone v0.9.1 或更高版本,将验证模型中的所有属性。但是,如果从未设置过 name (显式地或使用默认值),则该属性在设置之前将不会被验证。

这在填充表单时非常有用,因为您不想提醒用户尚未输入的输入错误。

如果您需要验证整个模型(已设置或未设置的两个属性),您可以调用validate()isValid(true)在模型上。

Backbone-Forms 文档特别提到了 model.validate:

https://github.com/powmedia/backbone-forms#model-validation

您可以轻松地挂钩 model.Validate 到您想要的任何编辑事件或单击事件。

此外,您可能会发现这很有用(但不确定它是否与 Backbone.Forms 兼容):

https://github.com/thedersen/backbone.validation

于 2012-10-30T12:27:43.403 回答
0

您可以使用 Backbone-Forms 进行“实时验证”的方式是扩展 Backbone.Form 模型并附加事件以调用您的自定义方法来验证该字段,然后只需“新建”您的自定义形式而不是 Backbone.Form

(Backbone.Form 只是 Backbone.View 的子类)

这是一些示例代码:

    var MyCustomForm = Backbone.Form.extend({
        events: {
            "blur input": "validateRealTime"
        },
        validateRealTime:   function(e){
            if(e.currentTarget.value == "") return;
            var err = this.fields[e.currentTarget.name].validate();
            if(err)
                myDisplayErrorMethod(err.message);
        }
    });

这样做的好处是它将利用您在模型模式中定义的验证器,因此您也可以获得您在那里定义的所有相同的验证和消息(如果您确实定义了自定义消息)。

此外,如果您像我一样定义了多个验证器,每次用户从该字段“模糊”时,它都会按顺序调用您的验证器,直到所有验证器都通过。所以这是一个优点。

旁注,你会注意到我做到了if(e.currentTarget.value == "") return;。这只是我的用例,我不想仅仅因为用户点击并点击离开而显示错误。

于 2013-09-19T19:35:15.110 回答