【问题标题】:Backbone Validation issue骨干网验证问题
【发布时间】:2013-10-11 19:53:46
【问题描述】:

我使用了 Backbone 验证插件(可从:https://github.com/thedersen/backbone.validation 获得)。 我还使用了 Bootstrap 3。我想验证 onChange 或 onBlur 事件。

我是这样用的:

在 Models.js 中,我有这样的规则:

   validation: {
       miliage: {
          required: true,
          pattern: 'number',
          msg: 'Укажите корректный пробег'
       },
       email : {
          required: true,
          pattern: 'email',
          msg: 'Укажите корректный email'
       },
    },

在渲染 html 后的 Views.js 中,我绑定了验证插件:

Backbone.Validation.bind( this, {
   valid: function( view, attr, selector ) {
       console.log('valid');
       console.log( attr );
       control = view.$('[' + selector + '=' + attr + ']')
       group = control.parents(".form-group")
       group.removeClass("has-error");
       group.find(".help-block").remove();
   },
   invalid: function( view, attr, error, selector ) {
       console.log('invalid');
       console.log( attr );
       control = view.$('[' + selector + '=' + attr + ']');
       console.log( control );
       group = control.parents(".form-group");
       group.addClass("has-error");
       group.find(".help-block").remove();
       group.append("<span for="+attr+" class='help-block'>"+error+"</span>");
  }

});

我使用 Bootsrap 规则显示错误消息。

在这个视图中,我有这样的事件:

 "change #email"     : "setEmail",
 "change #miliage"   : "setMiliage",

以及适当的功能(我为模型设置了相应的值):

setMiliage : function( event ) {       
     console.log( $( event.currentTarget ).val() );
     this.model.set('miliage', $(event.currentTarget).val(),{validate : true});
},
setEmail : function( event ) {
     this.model.set('email', $(event.currentTarget).val(),{validate :true})
},

如您所见,我将参数 validate:true 传递给方法集 - 以便在每次 onChange 事件触发时进行验证

问题:对模型的每个方面(所有属性)执行验证,这就是回调函数 validinvalid 的原因触发验证规则中定义的每个属性。我有两个或更多需要验证的字段,当用户更改其中任何一个中的文本时 - 在所有字段中都执行了验证。

示例:当用户第一次打开页面时 - 字段“里程”和“电子邮件”为空,当他们在第一个字段(里程)中输入值时,另一个字段指示发生错误 - 因为它仍然是空的(用户尚未输入),我只想显示第一个字段的消息。换句话说,当然第二个字段到目前为止是无效的,用户还没有到达那里。

问题:有没有一种方法可以对用户更改的唯一一个当前字段执行验证,并仅显示与其相关的错误?我还想在模型无效时将值放入模型中 - 我希望它只显示错误。另外,我想对提交表单进行控制验证(在主干保存方法之前)

我知道 isValid(field) 方法只能验证一个字段 - 但它不会触发有效或无效事件

提前致谢!

【问题讨论】:

    标签: javascript jquery validation backbone.js


    【解决方案1】:

    我认为正确的方法是在处理“更改”或“模糊”事件时跟踪哪些字段已至少更改一次,并忽略其他字段上的验证错误。当然,这不适用于处理“提交”,其中不应忽略任何字段

    【讨论】:

    • 谢谢。我通过不在模型中为此输入设置默认值来解决它。模型中没有属性 - 没有对更改或模糊进行验证,但在提交整个模型验证之前它仍然有效(当 model.validate() 触发时)
    【解决方案2】:

    我通过不在模型中为此输入设置默认值解决了这个问题(仅验证更改的输入) - 验证仅适用于模型中已经存在的属性。当我需要 onChange onBlur 验证时,我使用 model.set('email','test@email.com',{validate:true}),当整个模型 - model.validate() 或 model.save()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      相关资源
      最近更新 更多