2013-10-11 100 views
1

我使用了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' 
     }, 
    }, 

在Views.js渲染HTML之后我绑定验证插件:

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}) 
}, 

正如你所看到的,我通过PARAMS验证:true to方法设置 - 为了验证每次onChange事件触发时

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

示例:当用户第一次打开页面时,字段'miliage'和'email'为空,当他们在第一个字段中键入一个值(miliage)时,另一个字段表示错误发生 - 因为它仍然是空的(用户还没有输入),我想只显示第一个字段的消息。换句话说,第二个字段当然是无效的,但用户还没有到达那里。

问题:有没有办法在一个当前字段上执行验证,只有一个用户发生了变化,并且只显示与其相关的错误?我还想在模型无效时将值放入模型中 - 我希望它只显示错误。另外,我想执行控制验证提交表单

我知道有哪些可以验证只有一个字段和isValid(场)方法(骨架保存方法之前) - 但它不会触发有效或无效的事件

提前致谢!

回答

0

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

+0

谢谢。我通过未在模型中为此输入设置默认值来解决此问题。模型中没有属性 - 没有对更改或模糊进行验证,但在提交整个模型验证(当model.validate()触发器)时仍然可用。 – programmer

0

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