我希望能够使用主干表单和主干验证一次验证表单中的单个字段,但是如果我将我的要求放在模型验证而不是架构中,我会遇到问题。
我的模型是:
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 有更广泛的内置验证器,我想在这个例子之外使用它们。
我注意到主干形式状态
有 2 个级别的验证:模式验证器和常规的内置 Backbone 模型验证。当调用 form.commit() 或 form.validate() 时,Backbone Forms 都会运行。
但是,当我验证各个字段时,我不确定它是否正在运行常规验证?想要这样做的原因是,当用户开始创建事件时,我不想验证他们尚未填写的字段。
有什么方法我仍然可以验证单个字段而无需将验证移动到架构中?
提前致谢。
=======更新=======
在查看各个字段的表单编辑器源代码时,验证功能如下:
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;
},
它似乎没有使用模型验证,所以我想知道如何合并它?