我希望能够使用backbone forms和backbone validation在我的表单中一次验证单个字段,但是如果我将我的要求放入模型验证中,我就会遇到问题而不是架构。
我的模特是:
class Event extends Backbone.Model
url: ->
'/events' + (if @isNew() then '' else '/' + @id)
validation:
title:
required: true
start_date:
required: true
end_date:
required: true
schema: ->
title:
type: "Text"
start_date:
type: "DateTime"
title: "Start Date"
DateEditor: "DatePicker"
end_date:
type: "DateTime"
title: "End Date"
DateEditor: "DatePicker"
我的视图中使用这些代码的代码是
class Events extends Backbone.View
...
initialize: ->
@form = new Backbone.Form(model: @model).render()
Backbone.Validation.bind @form;
validateField: (field) ->
@form.on "#{field}:change", (form, fieldEditor) =>
@form.fields[field].validate()
render: ->
...
@validateField for field of @form.fields
...
然而,我的问题是它似乎只是验证我是否将required: true
移动到架构中,如下所示:
schema: ->
title:
type: "Text"
validators: ["required"]
但是我不想这样做,因为backbone.validation有更广泛的内置验证器,我想在这个例子之外使用它。
我注意到骨干式状态
有两个级别的验证:模式验证器和常规内置的Backbone模型验证。当调用form.commit()或form.validate()时,Backbone Forms将同时运行。
但是,当我验证各个字段时,我不确定它是否正在运行常规验证?想要这样做的原因是,当用户开始创建事件时,我不想验证他们尚未填写的字段。
有什么办法可以在不必将验证移到架构中的情况下验证单个字段吗?
提前致谢。
======= 更新 =======
在查看各个字段的form editors source code时,验证功能如下:
validate: function() {
var $el = this.$el,
error = null,
value = this.getValue(),
formValues = this.form ? this.form.getValue() : {},
validators = this.validators,
getValidator = Form.helpers.getValidator;
if (validators) {
//Run through validators until an error is found
_.every(validators, function(validator) {
error = getValidator(validator)(value, formValues);
return error ? false : true;
});
}
return error;
},
它似乎没有使用模型验证,所以我想知道如何将其合并?