骨干validation问题

我使用了Backbonevalidation插件(可从以下url获得: https : //github.com/thedersen/backbone.validation )。 我也使用了Bootstrap 3.我想validationonChange或onBlur事件。

我这样使用它:

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

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

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

 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(""+error+""); } 

});

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

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

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

和适当的function(我相应地为模型设置值):

 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 validate:true传递给方法集 – 以便在每次onChange事件触发时进行validation

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

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

问题:有没有办法在一个当前字段上执行validation用户已更改的唯一一个,并且只显示与之相关的错误? 我还想在模型无效时将值放入模型中 – 我希望它只显示错误。 另外,我想在提交表单上执行控制validation(在骨干保存方法之前)

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

提前致谢!

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

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